ฉันจะเริ่มต้นเซสชันเชลล์ทั้งหมดในไดเรกทอรีอื่นที่ไม่ใช่ $ HOME ได้อย่างไร


53

เมื่อฉันเปิดเชลล์ที่ไม่ใช่การเข้าสู่ระบบใน Ubuntu ไดเรกทอรีการทำงานปัจจุบันของฉันคือ/home/user_name( $HOMEตัวแปรสภาพแวดล้อมของฉัน) แต่ฉันต้องการเปลี่ยนสิ่งนี้เมื่อฉันเริ่มเทอร์มินัลของฉันฉันอยู่ในไดเรกทอรีอื่น

ฉันได้อ่านแล้วว่าเมื่อฉันเริ่มต้นเทอร์มินัลในอูบุนตูมี.bashrcไฟล์ที่มา ดังนั้นฉันเพิ่ม

export HOME=/home/user_name/Documents 

ไปยัง.bashrcไฟล์ของฉัน ตอนนี้เมื่อฉันเปิดเครื่องฉันยังอยู่ใน/home/user_nameไดเรกทอรี

ฉันจะเปลี่ยนสิ่งนี้ได้อย่างไร


สิ่งนี้ช่วยได้ไหม? askubuntu.com/a/75223/212231
Mark Plotnick

3
มันอาจจะคุ้มค่าหากพิจารณาที่จะไม่ทำสิ่งนี้ การออกแบบของ UNIX นั้นไม่ได้ส่งมอบโดยบรรพบุรุษเพื่ออะไรที่คุณรู้
Sean D

คำตอบ:


52

.bashrcแรกของทุกลบบรรทัดที่จากคุณ วิธีในการทำเช่นนี้ไม่ได้เล่นด้วย$HOMEตัวแปรนั้นจะชี้ไปที่ไดเรกทอรีหลักของคุณเสมอและคุณไม่ต้องการเปลี่ยนสิ่งนั้นเพียงเพื่อให้เปลือกหอยของคุณเริ่มต้นในที่อื่น

ฉันแน่ใจว่าจะมีวิธีที่สง่างามกว่าในการทำเช่นนี้ แต่ในฐานะวิธีการชั่วคราวคุณสามารถเพิ่มบรรทัดนี้ใน.bashrc:

cd ~/Documents 

เนื่องจากไฟล์นั้นถูกอ่านทุกครั้งที่คุณเริ่มเชลล์ที่ไม่ได้ล็อกอินใหม่ (เปิดเทอร์มินัลใหม่) cdคำสั่งจะถูกดำเนินการและเทอร์มินัลของคุณจะเริ่มต้น~/Documentsตามที่คุณต้องการ


โปรดทราบว่ามันจะมีผลต่อเชลล์แบบโต้ตอบที่ไม่ใช่การเข้าสู่ระบบทั้งหมด (และอันที่จะเข้าสู่ระบบหากคุณมา bashrc ของคุณจาก bash_profile ของคุณ) และอันที่ไม่ใช่แบบโต้ตอบเริ่มต้นโดย sshd
Stéphane Chazelas

@ StéphaneChazelasคุณแน่ใจนะ? มักจะมี[[ -z "$PS1" ]] && exitยามที่ด้านบน.bashrcซึ่งควรป้องกันสิ่งนี้สำหรับเซสชันที่ไม่มีการโต้ตอบ
Martin Ueding

2
@queueoverflow ปกติหรือไม่ ในระบบปฏิบัติการอะไร ในการกระจายที่? ไม่ได้อยู่ใน Debian, SuSe หรือ CentOS ที่จริงแล้วฉันคิดว่าฉันเคยเห็นสิ่งนี้บน Ubuntu แล้วเท่านั้น
terdon

@terdon ฉันได้เห็นมันบน Ubuntu และคิดว่าเป็นกรณีทั่วไป
Martin Ueding

20

เทอร์มินัลจะเริ่มในไดเรกทอรีการทำงานที่สืบทอดจากพาเรนต์

อย่างไรก็ตามบางคนอนุญาตให้แทนที่มันผ่านการตั้งค่าการกำหนดค่า

ด้วยgnome-terminalคุณสามารถแก้ไขโปรไฟล์ของคุณทำเครื่องหมายเรียกใช้คำสั่งที่กำหนดเองแทนเชลล์ของฉันและสร้าง:

sh -c 'cd ~/Documents; exec "${SHELL:-sh}"'

1

นี่คือสิ่งที่ฉันใส่ใน~/.bash_profile:

alias curDir="pwd | sed -e 's/ /\\ /'"
alias save='echo `curDir` > ~/.saved_dir'
alias saved='cd `cat ~/.saved_dir`'
saved

และฉันวางใจในสิ่งนี้ตลอดเวลา โดยทั่วไปเมื่อฉันทำงานในบางโครงการฉันจะsaveเป็นไดเรกทอรีหลักสำหรับมันและจากนั้นทุก ๆ เซสชันที่ตามมาจะเริ่มต้นที่นั่น จากนั้นเมื่อฉันเปลี่ยนโครงการหรืออะไรก็ตามฉันจะไปที่saveอื่น

ฉันพบคำถามนี้เมื่อมองหาวิธีที่ดีกว่า แต่สิ่งที่ฉันได้รับนั้นดีกว่าการใช้ hardcoding ไดเรกทอรีเดียว


วิธีนี้ใช้งานได้ดีในคอมไพล์ bash เช่นกัน อย่าลืมรีสตาร์ท bash shell หรือใช้ (ฉันคิดว่า) "source ~ / .bash_profile" หลังจากเปลี่ยนไฟล์
ทิม

0

สำหรับผู้ที่กำลังดูว่า.bashrcไฟล์อยู่ที่ไหนโดยทั่วไปมันเป็นไฟล์ที่ซ่อนอยู่ในไดเรกทอรีบ้าน

หากต้องการค้นหา:

เปิดเทอร์มินัลของคุณแล้วไปที่โฮมไดเร็กตอรี่แล้ว:

ls -al

เพื่อแสดงไฟล์ที่ซ่อนอยู่ทั้งหมด ตอนนี้คุณจะสามารถดู.bashrcไฟล์ของคุณได้

เพื่อที่จะเปลี่ยนไดเรกทอรีเริ่มต้น

  1. เปิด.bashrcไฟล์ในเท็กซ์เอดิเตอร์ของคุณโดยป้อนคำสั่ง:

    gedit .bashrc
  2. แก้ไขไฟล์นี้โดยเพิ่มคำสั่งของคุณในที่สุดเช่น:

    cd ~/YourDirectoryName
  3. บันทึกไฟล์และรีสตาร์ทเทอร์มินัล


คำถามไม่ได้ถามวิธีแก้ไข. bashrc เขาทำไปแล้ว และคำตอบของคุณเป็นเพียงคำตอบซ้ำของ @ terdon เมื่อสองปีก่อน
Davor Cubranic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.