pushd
,, popd
dan dirs
shell bawaan yang memungkinkan Anda memanipulasi tumpukan direktori . Ini dapat digunakan untuk mengubah direktori tetapi kembali ke direktori tempat Anda berasal.
Sebagai contoh
mulai dengan direktori berikut:
$ ls
dir1 dir2 dir3
pushd ke dir1
$ pushd dir1
~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir1 ~/somedir
dirs
perintah mengkonfirmasi bahwa kita memiliki 2 direktori pada stack sekarang. dir1
dan dir yang asli somedir
,.
pushd to ../dir3 (karena kita di dalam dir1
sekarang)
$ pushd ../dir3
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir3
dirs
menunjukkan kita memiliki 3 direktori di stack sekarang. dir3
,, dir1
dan somedir
. Perhatikan arahnya. Setiap direktori baru ditambahkan ke kiri. Ketika kita mulai menghapus direktori, mereka akan datang dari kiri juga.
ubah direktori secara manual menjadi ../dir2
$ cd ../dir2
$ pwd
/home/saml/somedir/dir2
$ dirs
~/somedir/dir2 ~/somedir/dir1 ~/somedir
Sekarang mulailah membuka direktori
$ popd
~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir1
Perhatikan kami muncul kembali ke dir1
.
Pop lagi ...
$ popd
~/somedir
$ pwd
/home/saml/somedir
Dan kita kembali ke tempat kita mulai somedir
,.
Mungkin sedikit membingungkan, tetapi kepala tumpukan adalah direktori tempat Anda berada saat ini. Karenanya ketika kami kembali somedir
, meskipun dirs
menunjukkan ini:
$ dirs
~/somedir
Tumpukan kami benar-benar kosong.
$ popd
bash: popd: directory stack empty
cd -
,, alias untuk memperpendekcd ..
, dll.).pushd
&popd
dalam skrip b / c mereka menyelamatkan saya dari harus mengingat dari mana saya berasal, saya selalu bisa hanyapopd
untuk kembali dari tempat saya berasal. Saya biasanya lakukanpopd >/dev/null 2>&1
untuk membuatnya diam. Saya menggunakan cd- setiap hari di shell saya. Ada beberapa tip menghemat waktu dalam artikel ini juga: thegeekstuff.com/2008/10/… .cd -
hanya melacak direktori terakhir, saya membayangkan akan ada masalah jika Anda memanggil fungsi yang juga mengubah direktori secara internal. dalam hal ini, fungsi akan berakhir ulang - ke direktori Anda saat ini, bukan direktori yang ingin Anda pop kembali. pushd / popd adalah metode teraman. Catatan: saya belum menguji teori saya.~/somedir/dir3
setelah yang pertamapopd
?Ada use case yang sangat berguna untuk
pushd
danpopd
perintah untuk bekerja dengan beberapa folder secara bersamaan.Anda dapat menavigasi tumpukan dengan sangat mudah, karena ini disebutkan. Artinya, Anda dapat memiliki beberapa folder kerja yang dapat Anda gunakan selama bekerja.
Lihat contoh sederhana di bawah ini.
Pertama, mari kita buat contoh struktur folder.
Kemudian Anda dapat menambahkan semua folder Anda ke tumpukan:
Anda dapat mencarinya dengan:
Untuk menavigasi dengan aman, Anda perlu menambahkan folder terakhir (nol) dua kali, karena akan selalu ditulis ulang:
Sekarang, Anda dapat melompat-lompat melalui folder ini dan bekerja dengan tumpukan seperti alias untuk folder. Saya kira bagian berikut ini cukup jelas:
Kiat tambahan adalah membuat beberapa alias untuk
dirs -v
.Sebagai contoh:
sumber
dirs -c
Satu kasus penggunaan sederhana untuk menggunakan dirs stack yang tidak dapat Anda lakukan hanya dengan cd adalah:
pushd .
menambahkan direktori XX saat ini kedirs
stack. Setelah itu, Anda dapat berpindah menggunakancd
, dan untuk kembali ke XX Anda hanya melakukanpopd
terlepas dari seberapa "jauh" Anda di pohon direktori (dapat melompati beberapa level, ke samping dll). Sangat berguna dalam skrip bash.sumber
pushd
/popd
bekerja independen daricd
, Anda dapat menggunakannya sebagai penanda lebih stabil daripadacd -
.pushd
danpopd
memungkinkan Anda untuk memanipulasi direktori pada stack.Saat Anda
pushd
direktori, Anda meletakkan direktori saat ini di tumpukan dan mengubah direktori ke yang ditentukan sebagai parameter.popd
akan memungkinkan Anda untuk kembali ke direktori di tumpukan.Jika Anda mengulangi, traversal direktori akan dipertahankan dan Anda dapat kembali ke direktori yang disimpan dalam urutan terbalik dari tempat Anda menyimpannya.
sumber
untuk bash , pada dasarnya: alih-alih menggunakan cd, dapat digunakan
pushd
untuk mengubah direktori, dengan penggunaan praktis: riwayat direktori yang dikunjungi disimpan (dengan benar: ditumpuk) dan satu dapat beralih di antaranyaUntuk melihat penggunaan tumpukan
dirs
dan untuk navigasi yang lebih mudah (untuk mendapatkan nomor "entri-tumpukan" gunakan:Keluaran:
Sekarang gunakan angka-angka ini dengan
cd
dan~
suka:Tetapi angka-angka ini disusun ulang sekarang dan posisi "0" akan berubah, jadi hanya
pushd
direktori ke posisi teratas dua kali (atau gunakan dummy di posisi 0) seperti:sekarang 1..3 akan mempertahankan posisinya
(untuk melepaskan direktori saat ini dari tumpukan / menghapusnya dari penggunaan sejarah
popd
)sumber
Satu kegunaan praktis yang saya temukan adalah untuk beralih antara direktori menggunakan pushd dan popd.
Misalkan kita memiliki dua direktori dir1 dan dir2 dan saya perlu beralih di antara mereka secara terus-menerus untuk beberapa alasan xyz.
Saat ini saya di somedir yang memiliki dua direktori
dir1
dandir2
:Sekarang saya beralih ke
dir1
Sekarang saya akan menambah
dir1
tumpukan dan beralih kedir2
Seperti yang Anda lihat, saya sekarang memiliki
dir2
dandir1
di stack dan saya saat ini masuk kedir2
.Sekarang untuk kembali
dir1
, saya akan laripushd || popd
.Voila, saya ke dir1 dan saya punya dir1 dan dir2 di stack. Untuk beralih kembali ke dir2 jalankan lagi
pushd || popd
Ini cara mudah untuk beralih di antara direktori. Sekarang, Anda mungkin tahu apa, mengapa saya perlu beralih di antara direktori? Nah satu use case adalah, ketika saya bekerja pada aplikasi web, saya punya file make saya di satu direktori dan file log saya di direktori lain. Seringkali ketika men-debug aplikasi, saya perlu beralih di antara direktori log, untuk memeriksa log terbaru dan kemudian beralih kembali ke direktori make, untuk membuat beberapa perubahan dan membangun aplikasi.
sumber
pushd
danpopd
kelebihannyacd -
?" Anda jelas tidak menjawab pertanyaan itu, karena Anda menjelaskan dengan tepat apa yang haruscd -
dilakukan. (2) Apa gunanya mengatakanpushd || popd
? Ya, saya tahu itucmdA || cmdB
berarti laricmdA
dan, jika gagal, maka jalankancmdB
. Saya bertanya apa gunanya dalam konteks ini.pushd
tanpa argumen berarti "menukar dua elemen teratas di tumpukan direktori"; gagal jika direktori saat ini adalah satu-satunya elemen pada tumpukan direktori. Dalam hal ini,popd
akan gagal juga.pushd
danpopd
.pushd || popd
untuk beralih di antara direktori:pushd
tanpa argumen yang melakukan hal ini.cd -
secara eksplisit ada hanya untuk beralih kembali ke direktori terakhir. Selain itu, pertanyaannya meminta keuntunganpushd
lebihcd -
, sementara jawaban ini jelas-jelas memberikan kerugian: mengetik lebih banyak.|| popd
beralih? Tolong jelaskan. (Apakah tidak cukup pushd?)cd -
untuk beralih di antara dua direktori. Selain itucd
tanpa argumen kembali ke direktori home Anda.Sederhananya - ketika Anda perlu menavigasi antara lebih dari 2 direktori, biasanya beberapa kali bolak-balik, karena
cd -
tidak akan memotongnya dengan apa pun di luar 2 folder.Jadi, misalnya, alih-alih mencoba kembali dengan jalur panjang sebelumnya dengan melihat riwayat buffer Anda atau menyelesaikan tab jalur panjang Anda cukup menumpuk yang penting dan jika perlu Anda dengan mudah pindah ke mereka dengan nomor mereka sendiri. Berputar di antara struktur direktori kompleks dan jalur panjang menjadi licin dan cepat.
Builtin juga memungkinkan Anda untuk memesan ulang tumpukan atau mengeluarkan direktori yang tidak Anda butuhkan lagi sehingga memungkinkan fleksibilitas dalam alur kerja Anda.
Penumpukan direktori juga dapat digunakan dalam skrip yang sama untuk operasi yang menjangkau beberapa direktori.
sumber
Saya menemukan penggunaan dirs / popd / pushd sedikit tidak nyaman. Saya datang dengan solusi pribadi saya di tcsh, dengan menambahkan kode berikut ke dalam .alias
dengan cara ini saya alias, misalnya, "p." untuk menyimpan direktori kerja saat ini ke dalam file ~ / .mydir. dan "cd." untuk memulihkan dir itu kapan saja dan di mana saja saya suka. "del." menghapus file yang sesuai; "rumah." set dir ke dir home (setara dengan cd; p.); "cdl" mencantumkan apa saja dir yang disimpan. Perhatikan bahwa jika Anda menggunakan ~ / Dropbox / .mydir $ b (atau layanan cloud lainnya seperti mis. OwnCloud) alih-alih.
sumber
ini membantu saya melompat di antara direktori ke direktori yang paling baru digunakan di terminal saya. :-) Semoga ini bisa membantu Anda menggunakan pushd, bukan popd, saya menggunakan cd ~ stackednumber
sumber
Menggunakan
cd
dancd -
memungkinkan Anda untuk beralih di antara hanya dua direktori Anda yang terakhir digunakan. Ukuran "direktori yang berfungsi" adalah dua.Dengan menggunakan
pushd
, Anda dapat menyimpan sejumlah besar direktori sewenang-wenang di set kerja Anda.Saya menggunakan
pushd
sebagian besar waktu daripadacd
. Setelah Anda membangun setumpuk direktori aktifpushd directory_name
, Anda dapat melompat di antara mereka sepanjang haripushd ~#
.Saya
popd
jarang menggunakan , hanya ketika saya ingin menghapus direktori dari tumpukan ketika saya tahu saya selesai menggunakan direktori itu.Pergi ke direktori dan hapus dari tumpukan:
Tetap di direktori saat ini dan hapus direktori lain dari stack:
Anda berakhir dengan gaya kerja yang mirip dengan membuka banyak jendela atau tab terminal (satu untuk setiap direktori tempat Anda bekerja aktif), tetapi semuanya dalam satu terminal. Ini menyimpan real estat layar, plus, karena jalur direktori semua tersedia dalam satu shell, Anda dapat melakukan hal-hal seperti:
Contoh:
Dalam
tcsh
(tetapi tidakbash
), Anda bahkan dapat menyimpan tumpukan direktori Anda ke file dan mengembalikannya nanti.Menyimpan:
Mengembalikan:
Jika tidak, ganti saja
~
dalambash
contoh dengan=
untuk digunakan dalamtcsh
.sumber
Pushd / popd adalah konsep sederhana yang membuat saya perlu memahaminya karena orang cenderung mengajarkannya dengan mendefinisikan perintah-perintah ini sebagai perintah yang 'memanipulasi tumpukan direktori' yang menurut saya membingungkan.
Saya melihatnya dengan cara yang berbeda:
pushd [folder_name] - akan cd ke [folder_name] dan akan mendokumentasikan tujuan yang [folder_name] dalam direktori stack sementara direktori teratas di stack akan selalu menjadi direktori saat ini Anda berada di
popd - pertama-tama akan cd Anda ke dalam catatan direktori yang ada di atas tumpukan kemudian dan menghapusnya dari tumpukan
dirs - Akan mencetak dir stack (dapat dianggap sebagai dir Db di mana entri paling kiri adalah direktori saat ini (atas tumpukan)
Jadi 2 kasus penggunaan paling populer adalah:
Use case 1: Navigasi menggunakan pushd dan popd
Katakanlah saya melakukan hal di atas karena saya ingin menavigasi kembali ke folder yang saya dokumentasikan!
Perhatikan bahwa jika saya melakukan cd secara manual, saya akan memengaruhi entri tumpukan direktori teratas (yang selalu merupakan direktori saat ini)
Mari bernavigasi mundur sekarang:
Sekali lagi saya dapat mendokumentasikan dir apa pun yang saya inginkan dan kemudian menavigasi secara manual ke dir lain maka saya akan dapat dengan mudah kembali ke dir yang terdokumentasi yang saya masukkan ke stack.
Use case 2: Menavigasi menggunakan indeks tumpukan numerik
Katakanlah saya mendorong menggunakan dird dir4 dir3 dir2 dir1, sekarang menjalankan dir -v akan menunjukkan:
Sekarang Anda dapat melakukan operasi Linux apa pun yang melibatkan direktori menggunakan indeks tumpukan:
Anda bahkan dapat menghapus entri tertentu dari tumpukan direktori:
Berharap bahwa menggunakan kata-kata "mendokumentasikan" atau berpikir tentang tumpukan stack karena beberapa jenis Db menyederhanakan konsep!
sumber