Bagaimana cara menyegarkan direktori di BASH?

24

Saya memiliki direktori, berisi file yang dihasilkan oleh kompiler. Selama setiap pembangunan kembali direktori ini dibersihkan dan, setelah proses pembangunan lsmemberi saya output kosong. Setelah saya cdkeluar dari direktori dan kemudian kembali ke sana berfungsi dengan benar. Pertanyaannya adalah:

  1. Apakah ada cara lain yang lebih elegan untuk menyegarkan direktori?
  2. Apa yang sebenarnya terjadi ketika file dihapus dan diciptakan kembali? Mengapa saya perlu cdmelihat konten direktori yang sebenarnya?
Roma
sumber

Jawaban:

10

Script Anda kemungkinan besar menghapus direktori, dan bukan hanya file yang ada di sana. Jadi, ketika Anda sudah memilikinya cd, dan direktori dihapus, Anda lakukan lspada direktori yang sebenarnya tidak ada.

Dengan cd ..dan cd (directory)Anda pindah ke atas dan kembali ke direktori (baru dibuat), dan file ada seperti yang Anda harapkan.

Alternatif terbaik adalah alih-alih cdmasuk dan keluar dari direktori, adalah menambahkan nama direktori ke lsperintah Anda , dan menjalankannya dari direktori induk. Jadi, ls YourSubdirectorybukannya adil ls.

Kent
sumber
45

Bahkan ada cara yang lebih pendek: cd .

wjr
sumber
3
Menarik. Seperti burung kolibri, ini, secara logis, seharusnya tidak berfungsi - namun tampaknya berhasil. Saya kira Anda tahu itu berhasil karena Anda sudah mencobanya. Apakah Anda punya dokumentasi untuk itu? Yaitu, jika saya berada di tim pengembangan POSIX / bash, saya akan tergoda untuk menganggap ini sebagai bug. Apakah Anda tahu ada dokumentasi yang mengatakan bahwa itu seharusnya berfungsi seperti ini?
G-Man Mengatakan 'Reinstate Monica'
3
Seperti elang, ini, indah, mengapung di atas bunga - namun memakan burung kolibri.
Matt Faus
Iya nih! sangat sempurna
chrismarx
1
Ini jawaban yang lebih baik.
deddebme
Ah. Aku tahu itu! Pasti ada jalan. Terima kasih!
andersoyvind
10

Itu terlihat aneh, tetapi pendek dan menyegarkan direktori:

cd `pwd`

Perhatikan itu adalah kutu kembali, bukan tanda kutip tunggal di sekitar pwd

pengguna339088
sumber
2

Apa yang dikatakan @Kent atau: jangan hapus direktori tetapi hanya isinya, dengan cara ini Anda dapat tetap berada di direktori (tanpa " cd .. && cd -") dan "ls" melakukan apa yang Anda harapkan.

cujau
sumber
2

Akan lebih baik jika Anda tidak menghapus direktori, tetapi cd ..; cd -Anda bisa melakukannya cd $PWD.

Teddy
sumber
2

buat alias refresh = "cd .. && cd -" yang akan menuju direktori dan kemudian cd ke direktori sebelumnya

jika Anda yakin akan membutuhkan daftar lagi, Anda dapat memilikinya

alias refresh="cd .. && cd - && ls -lrt"

setelah ailas dibuat, simpan alias ke file ~ / .bashrc Anda dengan melakukan

alias | grep refresh >> ~/.bashrc

sehingga tersedia saat Anda masuk berikutnya.

SK176H
sumber
Di Unix refreshsudah out-of-box.
kenorb
Apa yang Anda maksud dengan "out-of-box"? Ketika saya melihatnya, saya menafsirkannya berarti "standar"; sekarang aku bertanya-tanya apa maksudmu. Tentukan "UNIX". Cygwin tidak memiliki standar perintah "refresh" (OK, Cygwin kehilangan banyak hal yang standar di POSIX / * nix / apa pun), dan begitu pula sistem Linux saya.
G-Man Mengatakan 'Reinstate Monica'