ไดเรกทอรีปัจจุบัน 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.