เมื่อใช้ bash จะมีวิธีในการผลักและวางไดเรคทอรีการทำงานปัจจุบันหรือไม่ ฉันพยายามเขียนแต่ไดเรกทอรีปัจจุบันอยู่ในขณะนี้bash;cd dir; ./dostuff;exit;
dir
เมื่อใช้ bash จะมีวิธีในการผลักและวางไดเรคทอรีการทำงานปัจจุบันหรือไม่ ฉันพยายามเขียนแต่ไดเรกทอรีปัจจุบันอยู่ในขณะนี้bash;cd dir; ./dostuff;exit;
dir
คำตอบ:
มีpushd
และpopd
Bash จะเก็บประวัติของไดเรกทอรีที่คุณเยี่ยมชมคุณเพียงแค่ต้องถาม Bash เก็บประวัติไว้ใน stack และใช้คำสั่ง pushd และ popd เพื่อจัดการ stack
ตัวอย่าง:
$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me
การเรียกbash
เริ่ม subshell ใหม่ซึ่งมีอินพุตของตัวเอง คำสั่งอื่น ๆ จะไม่ทำงานจนกว่าจะออก การล้อมรอบคำสั่งที่จะรันด้วย parens จะเริ่มต้นเชลล์ย่อยใหม่ แต่จะรันคำสั่งภายใน
( cd dir ; ./dostuff )
หากคุณไม่ต้องการประวัติไดเรกทอรีหลายระดับคุณสามารถทำได้:
cd foo
# do your stuff in foo
cd -
เมื่อเทียบกับpushd
/ popd
นี้มีข้อเสียที่ว่าถ้าล้มเหลวคุณจะจบลงในไดเรกทอรีที่ไม่ถูกต้องด้วยcd foo
cd -
(น่าจะcd -
เป็นสคริปต์นอกที่มีประโยชน์มากกว่า "ลองกลับไปที่ที่ฉันเพิ่งไป")
ฉันใช้นามแฝงในการติดตามการเปลี่ยนแปลงไดเรกทอรีของฉันเพื่อ 'cd' ที่อื่นฉันสามารถย้อนกลับไปยังที่ที่ฉันใช้ 'cd' หรือกลับไปที่สองโดยใช้ 'cd .. ' ฯลฯ
alias pushdd="pushd \$PWD > /dev/null"
alias cd='pushdd;cd'
alias ssh='ssh -A'
alias soc='source ~/.bashrc'
#below to go back to a previous directory (or more)
alias popdd='popd >/dev/null'
alias cd.='popdd'
alias cd..='popdd;popdd'
alias cd...='popdd;popdd;popdd'
alias cd....='popdd;popdd;popdd;popdd'
#below to remove directories from the stack only (do not 'cd' anywhere)
alias .cd='popd -n +0'
alias ..cd='popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0'
..cd
แข็งแกร่งเพียงพอหรือไม่ ดูเหมือนว่าจะลบเฉพาะ 10 รายการสุดท้ายออกจากสแต็ก
pushd Saves the current directory on the top of the directory stack and then cd to dir. With no arguments, pushd exchanges the top two directories.