ไดเรกทอรีปัจจุบัน push / pop?


66

เมื่อใช้ bash จะมีวิธีในการผลักและวางไดเรคทอรีการทำงานปัจจุบันหรือไม่ ฉันพยายามเขียนแต่ไดเรกทอรีปัจจุบันอยู่ในขณะนี้bash;cd dir; ./dostuff;exit;dir

linux  bash 

คำตอบ:


91

มีpushdและpopd

Bash จะเก็บประวัติของไดเรกทอรีที่คุณเยี่ยมชมคุณเพียงแค่ต้องถาม Bash เก็บประวัติไว้ใน stack และใช้คำสั่ง pushd และ popd เพื่อจัดการ stack

อ่านเพิ่มเติม

ตัวอย่าง:

$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me

1
ส่วนที่ตัดตอนมาจากลิงค์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.
หัวหน้านาย

31

การเรียกbashเริ่ม subshell ใหม่ซึ่งมีอินพุตของตัวเอง คำสั่งอื่น ๆ จะไม่ทำงานจนกว่าจะออก การล้อมรอบคำสั่งที่จะรันด้วย parens จะเริ่มต้นเชลล์ย่อยใหม่ แต่จะรันคำสั่งภายใน

( cd dir ; ./dostuff )

1
ยอดเยี่ยม! ไม่จำเป็นต้องกด / ป๊อปอัปเมื่อมีความตั้งใจเพียงแค่เรียกใช้คำสั่งในไดเรกทอรีอื่น (เช่นอัปเดตการอ้างอิง) จากนั้นกลับมาที่ปัจจุบัน
Dan Dascalescu

12

หากคุณไม่ต้องการประวัติไดเรกทอรีหลายระดับคุณสามารถทำได้:

cd foo
# do your stuff in foo
cd -

เมื่อเทียบกับpushd/ popdนี้มีข้อเสียที่ว่าถ้าล้มเหลวคุณจะจบลงในไดเรกทอรีที่ไม่ถูกต้องด้วยcd foocd -

(น่าจะcd -เป็นสคริปต์นอกที่มีประโยชน์มากกว่า "ลองกลับไปที่ที่ฉันเพิ่งไป")


4

ฉันใช้นามแฝงในการติดตามการเปลี่ยนแปลงไดเรกทอรีของฉันเพื่อ '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'

1
คุณช่วยอธิบายรายละเอียดเพิ่มเติมเกี่ยวกับรหัสนี้ได้อย่างไร
bwDraco

นั่นฉลาด ฉันมีนามแฝงอยู่รอบ ๆ pushd และ popd เพื่อทำสิ่งที่ฉันชอบ ฉันใช้ไดเรกทอรีสแต็คตลอดเวลา ฉันเกลียดการดูซีดีคนที่ใดที่หนึ่งแล้วเลื่อนกลับไปมองหาไดเรกทอรีก่อนหน้าเพื่อตัดและวาง ฉันไม่สามารถทำงานส่วนใหญ่ในโฮมไดเร็กตอรี่ของฉันได้เนื่องจากโควต้าดังนั้นฉันต้องใช้พูลหน่วยเก็บข้อมูลบนเครือข่าย
Michael Mathews

1
นามแฝงนั้น..cdแข็งแกร่งเพียงพอหรือไม่ ดูเหมือนว่าจะลบเฉพาะ 10 รายการสุดท้ายออกจากสแต็ก
reynoldsnlp
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.