direktori push / pop saat ini?

66

Dengan bash apakah ada cara untuk mendorong dan membuka direktori kerja saat ini? Saya mencoba menulis bash;cd dir; ./dostuff;exit;tetapi direktori saat ini sekarang dir.


sumber

Jawaban:

91

Ada pushddanpopd

Bash akan menyimpan sejarah direktori yang Anda kunjungi, Anda hanya perlu bertanya. Bash menyimpan histori dalam stack dan menggunakan perintah pushd dan popd untuk mengelola stack.

Lebih banyak untuk dibaca

Contoh:

$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me
Nifle
sumber
1
Kutipan dari tautanpushd 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.
Ketua Master
31

Memanggil bashmemulai subkulit baru, yang memiliki input sendiri; tidak ada perintah lain yang akan berjalan sampai keluar. Mengitari perintah yang akan dijalankan dengan parens juga akan memulai subkulit baru, tetapi akan menjalankan perintah di dalamnya.

( cd dir ; ./dostuff )
Ignacio Vazquez-Abrams
sumber
1
Cemerlang! Tidak perlu menekan / pop ketika tujuannya adalah menjalankan perintah di direktori yang berbeda (mis. Perbarui dependensi) kemudian kembali ke yang sekarang.
Dan Dascalescu
12

Jika Anda tidak memerlukan banyak tingkatan riwayat direktori, Anda juga dapat melakukannya:

cd foo
# do your stuff in foo
cd -

Dibandingkan dengan pushd/ popd, ini memiliki kelemahan bahwa jika cd foogagal, Anda berakhir di direktori yang salah dengannya cd -.

(Mungkin cd -skrip luar lebih berguna. "Mari kita kembali ke tempat saya dulu.")

tuomassalo
sumber
4

Saya menggunakan alias untuk melacak perubahan direktori saya sehingga untuk 'cd' di suatu tempat saya bisa kembali ke tempat saya menggunakan 'cd.', Atau kembali dua menggunakan 'cd ..', dll .;

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'
cdp
sumber
1
Bisakah Anda menjelaskan secara lebih rinci apa yang dilakukan kode ini?
bwDraco
Itu pintar. Saya memiliki alias di sekitar pushd dan popd saya untuk melakukan beberapa hal yang saya suka. Saya menggunakan tumpukan direktori sepanjang waktu. Saya benci melihat orang-orang cd di suatu tempat dan kemudian gulir kembali mencari direktori sebelumnya untuk memotong dan menempel. Saya tidak dapat melakukan sebagian besar pekerjaan saya di direktori rumah saya karena kuota, jadi saya harus menggunakan penyimpanan gabungan pada jaringan.
Michael Mathews
1
Apakah alias ..cdcukup kuat? sepertinya itu hanya menghapus 10 item terakhir dari tumpukan.
reynoldsnlp