Salah satu tutorial yang saya ikuti secara singkat menyatakan bahwa cd .
tidak ada gunanya. Saat mencoba mereplikasi masalah yang ditunjukkan oleh OP dalam rekursi tautan Simbolik - apa yang membuatnya "diatur ulang"? , Saya juga mencoba cd .
, yang menunjukkan efek yang sama yang dijelaskan OP ( $PWD
variabel tumbuh ), yang dapat diatasi cd -P
.
Ini membuat saya bertanya-tanya, adakah kasus di mana seseorang sebenarnya ingin menggunakannya cd .
?
cd-command
Sergiy Kolodyazhnyy
sumber
sumber
cd .
untuk memicu cek itu karena pendek dan sederhana. Meskipun saya pikir Anda bermaksud pertanyaan itu untuk lingkungan vanila.$PWD
,cd .
juga perubahan$OLDPWD
ke direktori saat ini. Saya (saat ini) tidak tahu mengapa ini mungkin berguna, tetapi demi kelengkapan ...cd .
, meskipun melihat jawaban di bawah, saya mungkin di masa depan, tetapi saya kadang-kadang digunakanpushd .
ketika saya ingin dapatpopd
kembali ke direktori ini nanti. misalnya ketika menjalankan skrip build yang berfungsiconfigure
,cd output...
danmake
, dan ketika selesai, saya ingin kembali ke direktori asli. Alih-alih menyimpan salinan buildscript saya sendiri yang berbeda dari yang diharapkan orang lain, saya hanya menjalankannyapushd .; ./BuildScriptName.sh; popd
, dan ini juga memberi saya kebebasan untuk tidakpopd
kadang - kadang, danpopd
kemudian sebagai gantinya./bin/cd
sini unix.stackexchange.com/q/50058/85039Jawaban:
Saya pikir ini terlalu memikirkan masalah.
cd .
mungkin bukan sesuatu yang orang akan jalankan secara manual dalam hal-hal yang biasa, tetapi pasti adalah sesuatu yang dapat muncul dalam eksekusi terprogram (pikirkan situasi apa pun yang Anda mungkincd
ke direktori yang berisi file, yang jalurnya disediakan oleh pengguna ). Oleh karena itu, ia tidak harus memiliki penggunaan khusus: selama memenuhi semantik yang biasacd <some-path>
, itu berguna.sumber
.
harus diperlakukan sebagai jalur yang valid yang ditentukan olehcd
sintaks saja.IFS= read Dir; do cd "$Dir"; do_something; done < <(find . -type d)
. Selama perjalanannya, find menghasilkan.
sebagai path, sehingga perintahcd "$Dir"
diperluas kecd .
. Jadi, dalam skrip, ini sangat berguna.cd ${path_to_directory}
, tetapi pada beberapa titik ternyata direktori tersebut adalah direktori saat ini,path_to_directory = .
jadi Anda perlucd .
bekerja untuk berjaga-jaga.if
pemeriksaan danelse
klausa, segala jenis casing khusus) tidak diperlukan.Jalur direktori bisa berubah sejak perintah terakhir dijalankan, dan tanpa
cd .
bash dan shell ksh93 akan bergantung pada direktori kerja logis yang dijelaskan dalam posting yang ditautkan dalam pertanyaan, jadi panggilancd .
yang membuat masalah shellgetcwd()
syscall akan memastikan Anda jalur saat ini masih valid.Langkah-langkah mereproduksi di bash:
mkdir ./dir_no_1; cd ./dir_no_1
mv dir_no_1 dir_no_2
echo $PWD
danpwd
. Perhatikan bahwa direktori telah diubah namanya secara eksternal; lingkungan shell belum diperbarui.cd .; pwd; echo $PWD
. Perhatikan nilainya telah diperbarui.ksh93, bagaimanapun, tidak memperbarui informasi lingkungan, jadi
cd .
di ksh93 sebenarnya tidak berguna. Di/bin/dash
dalam Ubuntu dan sistem berbasis Debian lainnya,cd .
pengembaliandash: 3: cd: can't cd to .
kesalahan, namuncd -P .
berfungsi (tidak seperti di ksh93).sumber
mv ../dir_no_1 ../dir_no_2
dalam yang sama terminal / bash.pwd
sebenarnya adalah built in, namun memohon/bin/pwd
tidak berpengaruh pada lingkungan shell - utilitas eksternal pada umumnya tidak mempengaruhi lingkungan shell. Alasan mengapa/bin/cd
dan/bin/pwd
ada adalah untuk kesesuaian POSIX, antara lain. Ada diskusi yang bagus tentang cd eksternal yang beberapa di antaranya mungkin berlaku/bin/pwd
jugaKasus penggunaan lain
cd .
adalah ketika direktori Anda saat ini telah dihapus dan kemudian dibuat lagi. Pertimbangkan untuk mencoba yang berikut -temp
cd temp
dan kemudian lakukanls
temp
ls: cannot open directory .: Stale file handle
cd .
dan kemudian melakukan ls bekerja dengan baiksumber
cd: can't cd to .
Sekarang setelah saya melihatnya, ini sudah disebutkan dalam jawaban Sergiy (bergerak, menghapus / menciptakan kembali - pada dasarnya sama: direktori tempat Anda berada tidak lagi seperti aslinya path)cd .
untuk pindah ke direktori baru dengan nama yang sama.cd .
semua waktu ketika saya memiliki shell yang direktori kerjanya saat ini dipasang dengan sshfs tetapi sesi ssh telah ditutup dan dibuka kembali.PWD
variabel lingkungan), kemudian berjalan hierarki sistem file dari root, ke direktori yang kebetulan dapat dijangkau melalui jalur itu, apakah itu sebenarnya direktori yang sama atau tidak. Ini sangat cocok dengan use case dalam jawaban ini.cd .
bekerja ketika direktori telah dihapus tautannya dan direktori baru yang berbeda dibuat pada jalur sistem file yang sama. Direktori kerja saat ini telah dihapus tautannya dan mungkin sebagai bagian dari itu, direktori itu tidak lagi memiliki.
atau..
entri, dan bahkan jika itu terjadi,.
entri tersebut harus terus mengarah ke dirinya sendiri. Sepertinya shell atau kernel sedang mengeksekusi perintah cd berdasarkan pada apa nama path direktori bukan hanya mengakses.
entri. Adakah yang bisa mengkonfirmasi perilaku itu?Anda dapat menghapus
$OLDPWD
dengan cepatcd .
, jika harus ada kasus di mana Anda tidak ingin menunjuk ke mana saja "menarik". Itu juga akan mempengaruhicd -
.sumber
Secara pemrograman, ini berguna sebagai no-op. Pertimbangkan jalur yang disediakan dari input eksternal.
Dengan path seperti "fred.txt" direktori akan menjadi
.
, mengarah kecd .
sumber
dirname
perintah menghasilkan.
mana diperlukan untuk menghindari melanggar kode yang mengharapkan untuk dapat membagi jalan.Ini biasa terjadi jika Anda harus bekerja dengan kabel USB yang buruk. Setelah perangkat terputus dan terhubung lagi, dan diautomatisasi ke direktori yang sama, Anda harus menggunakannya
cd .
untuk membuatnya berfungsi kembali.sumber
Perhatikan bahwa "." adalah cara yang tepat untuk menentukan nama file yang terbuka sebagai direktori kerja saat ini dari proses apa pun (termasuk proses shell tentu saja), dan "." selalu merupakan nama file yang valid di setiap dan semua direktori, termasuk direktori kerja saat ini. Nama tersebut
.
mungkin bukan nama yang valid untuk file untuk contoh proses tertentu jika, katakanlah, direktori kerja saat ini yang mendasarinya telah dihapus (atau menjadi "buruk", misalnya gagang NFS basi), tetapi itu adalah nama yang valid file yang dijamin ada di setiap direktori yang valid.Jadi
.
harus argumen yang valid untuk perintah apa pun yang menerima nama direktori, dan dengan demikian dalam shell standarcd .
harus menjadi perintah yang valid.Apakah
cd .
bermanfaat atau tidak tergantung pada implementasi shell. Seperti disebutkan itu dapat berguna jika shell me-reset ide internal tentang pathname lengkap dari direktori yang aktif saat ini setelah memanggilchdir
panggilan sistem yang mendasarinya , katakan misalnya jika direktori yang mendasarinya (atau beberapa induknya) telah berganti nama.Setidaknya beberapa shell yang saya tahu (
/bin/sh
pada FreeBSD dan NetBSD) akan dikonversicd ""
menjadicd .
, yang bisa dibilang merupakan fitur untuk mendukung penggunaan program dalam skrip shell di mana variabel dapat digunakan sebagai parameter (yaitu mengubah substitusi variabel kosong menjadi " melakukan apa-apa "hasil), meskipun sejarah komit FreeBSD mengatakan perubahan itu secara langsung karena menambahkan dukungan POSIX untuk mencegah kegagalanchdir("")
, yang mandat POSIX harus gagal.Beberapa shell lain akan menggantikan
.
dengan apa pun yang mereka simpan sebagai pathname yang sepenuhnya memenuhi syarat untuk direktori kerja mereka saat ini, dan dengan demikian bagi mereka ini memungkinkan untuk perilaku yang disebutkan dalam jawaban Sahil Agarwal .sumber
Saya menggunakan perintah ini hanya hari ini ketika saya mengubah cabang yang saya kerjakan di Git, dari dalam direktori yang pertama kali dibuat pada cabang yang sama. Rebase berjalan baik tetapi setelah itu,
git status
melakukan kesalahan. Setelahcd .
semuanya normal.(Saya bekerja di MobaXterm di Windows, kebetulan. Kalau-kalau Anda mencoba mereproduksi ini. Mungkin tidak terjadi pada sistem lain.)
Saya juga telah menggunakan perintah ini dalam direktori yang di-refresh oleh proses otomatis yang mengesampingkan direktori lama dan menggantinya dengan yang baru (sehingga sedekat mungkin dengan atomik). Bukan situasi yang umum tetapi
cd .
justru apa yang dibutuhkan.Setelah membaca jawaban yang luar biasa ini dari Stephane Chazelas:
Saya sekarang mengerti bahwa kasus penggunaan saya di atas hanya berfungsi karena saya menggunakan
bash
, yangcd .
setara dengancd "$PWD"
. Saya sangat merekomendasikan membaca jawaban yang ditautkan.sumber
Saya menggunakan
cd .
untuk menjalankan kembali hal-hal yang saya kelebihancd
dengan melaluibash
fungsi.Dari saya
~/.bashrc
:sumber
EDIT: Ini sudah disarankan oleh Sahil sebelumnya.
Ini berguna jika Anda berada di dalam folder yang dihapus dan diciptakan kembali oleh proses lain. Misalnya, dengan asumsi dua sesi terminal
$1
dan$2
:Saya tidak yakin di mana tepatnya (OS, SHELL, ...?) Akar penyebab perilaku ini.
sumber
Tidak, itu tidak masuk akal. Baik dalam scripting, itu tidak melakukan apa-apa.
sumber
$PWD
, dan itu mungkin akan memanggil fungsi shell lain jika pengguna telah menyediakancd
fungsi mereka sendiri atau alias untuk membebani built-incd
. Ini juga akan memverifikasi bahwa direktori saat ini masih valid dan penggunaan saat ini memiliki izin untuk berada di sana.cd .
akan mengeluh.