pushd / popd นั้นเป็นแนวคิดที่เรียบง่ายซึ่งทำให้ฉันเข้าใจสักครู่เพราะคนมักจะสอนมันโดยการกำหนดคำสั่งเหล่านี้เป็นคำสั่งที่ 'จัดการกับไดเรกทอรีสแต็ค' ซึ่งในความคิดของฉันสับสน
ฉันดูมันในวิธีที่แตกต่าง:
pushd [folder_name] - จะ cd ไปที่ [folder_name] และจะบันทึกปลายทางซึ่งเป็น [folder_name] ในสแต็ก dir ในขณะที่ไดเรกทอรีบนสุดในสแต็กจะเป็น dir ปัจจุบันที่คุณอยู่
popd - คุณจะ cd ครั้งแรกในเรคคอร์ดไดเร็กทอรีซึ่งอยู่ด้านบนสุดของสแต็กจากนั้นลบออกจากสแต็ก
dirs - จะพิมพ์สแต็ค dir (สามารถถือว่าเป็น dir Db โดยที่รายการด้านซ้ายสุดคือไดเรกทอรีปัจจุบัน (ด้านบนของสแต็ก)
ดังนั้นกรณีใช้งานที่ได้รับความนิยมมากที่สุด 2 กรณีคือ:
ใช้กรณีที่ 1:การนำทางโดยใช้ pushd และ popd
root@mypc:/main/$ ls
dir1 dir2 dir3 dir4
root@mypc:/main/$ dirs # prints the current stack
/main
root@mypc:/main/$ pushd dir1 # Will cd to dir1 and document dir1 in dir stack, stack is now:
/main/dir1 /main
root@mypc:/main/dir1$ # I am now in /main/dir1
root@mypc:/main/dir1$ # Now let's go wild and document whatever I want
root@mypc:/main/dir1$ pushd ../dir2
root@mypc:/main/dir2$ # Woo I am in /main/dir2
root@mypc:/main/dir2$ pushd ../dir3
root@mypc:/main/dir3$ # Woo I am in /main/dir3
root@mypc:/main/dir3$ pushd ../dir4
root@mypc:/main/dir4$ # Woo I am in /main/dir4
root@mypc:/main/dir4$ dirs # Now dir stack is:
/main/dir4 /main/dir3 /main/dir2 /main/dir1 /main
สมมติว่าฉันได้ทำไปแล้วเนื่องจากฉันต้องการนำทางกลับไปยังโฟลเดอร์ที่ฉันบันทึกไว้!
โปรดทราบว่าถ้าฉัน cd ด้วยตนเองฉันจะส่งผลกระทบต่อรายการสแต็ค dir ด้านบน (ซึ่งมักจะ dir ปัจจุบัน)
root@mypc:/main/dir4$ cd .. # Now dir stack is:
# (note that /main appear in the leftmost as well which is the top of the stack)
/main /main/dir3 /main/dir2 /main/dir1 /main
root@mypc:/main$
ลองย้อนกลับไปดูกันเลย:
root@mypc:/main$ popd
root@mypc:/main$ # Still in /main since it was at the top of the dir stack
root@mypc:/main$ dirs # Stack is now:
/main/dir3 /main/dir2 /main/dir1 /main
root@mypc:/main$ popd
root@mypc:/main/dir3$ popd # Woo in dir3 now, about to navigate to dir2
root@mypc:/main/dir2$ popd # Woo in dir2, about to navigate to dir1
root@mypc:/main/dir1$ dirs # Stack is now:
/main
ฉันสามารถทำเอกสารอะไรก็ได้ที่ฉันต้องการและจากนั้นนำทางด้วยตนเองไปยัง dir อื่นจากนั้นฉันก็จะสามารถกลับไปที่ dir เอกสารที่ฉันใส่เข้าไปในสแต็กได้อย่างง่ายดาย
ใช้กรณีที่ 2:การนำทางโดยใช้ดัชนีสแต็กตัวเลข
ให้บอกว่าฉันผลักโดยใช้ pushd dir4 dir3 dir2 dir1 ตอนนี้ทำงาน dir -v จะแสดง:
root@mypc:/main$ dirs -v
0 /main/dir1 (this is the current dir you are in always)
1 /main/dir2
2 /main/dir3
3 /main/dir4
ตอนนี้คุณสามารถดำเนินการใด ๆ กับ Linux ที่เกี่ยวข้องกับไดเรกทอรีโดยใช้ดัชนีสแต็ก:
root@mypc:/main$ cp ~2/temp.txt ~3/new_temp.txt # this will run in the background, something like:
# cp /main/dir2/temp.txt /main/dir3/new_temp.txt
คุณสามารถลบรายการเฉพาะจาก dir stack:
root@mypc:/main$ popd ~4
หวังว่าการใช้คำว่า "documenting" หรือคิดเกี่ยวกับ dir stack เพราะ Db บางประเภททำให้แนวคิดง่ายขึ้น!
cd -
, นามแฝงสำหรับการย่อcd ..
ฯลฯ )