Kembalikan fungsionalitas 'cd ..' setelah mengikuti tautan simbolik


13

Jika saya membuat tautan simbolik di terminal dengan perintah seperti

ln -s /path/to/some/directory symbolicLink

lalu ikuti tautannya dengan

cd symbolicLink

terminal kelihatannya berpikir bahwa cwd ~/symbolicLink/adalah benar-benar menunjukkan meskipun ~/path/to/some/directory/(dengan asumsi bahwa link dibuat ~, tentu saja). Apakah ini berarti bahwa jika saya kemudian ketik cd ..saya dibawa kembali ke ~, karena terminal 'berpikir' ini adalah induk dari cwd.

Apa yang akan saya perlu mengubah sehingga cd ..malah akan membawa saya ke ~/path/to/some/, yaitu nyata induk ~/path/to/some/directory/?

Jawaban:



5

Ada peringatan halus dalam cd -Pperilaku (diposting sebagai jawaban karena panjangnya):

$ dir1=$(mktemp --directory)
$ dir2=$(mktemp --directory)
$ ln -s -- "$dir1" /tmp/start
$ ln -s -- "$dir2" "$dir1"
$ cd "/tmp/start/"*
$ cd -P ..

Apa yang harus pwddicetak sekarang? Logikanya, bisa jadi keduanya

  1. $dir1, jika cd -P ..dilakukan cd ..pertama dan cd -- "$(readlink -f)"sesudahnya, atau
  2. /tmp, jika cd -P ..dilakukan cd -- "$(readlink -f)"pertama dan cd ..sesudahnya.

Bahkan ia melakukan yang terakhir, artinya pwdsecara intuitif dua tingkat lebih tinggi daripada direktori "induk".


1
Terima kasih! cd -Pmasih memecahkan masalah yang saya hadapi, tetapi masih berguna untuk diketahui.
Val


2

Saya merasakan sakit Anda — saya menganggap bashpada dasarnya rusak untuk penggunaan interaktif karena perilaku ini.

tcshadalah shell yang jauh lebih ramah pengguna untuk penggunaan interaktif. Biarkan bashuntuk pemrograman (jika Anda bersikeras menulis skrip shell ketika ada banyak alternatif yang lebih baik di antara banyak bahasa scripting).

Untuk mengganti cangkang untuk setiap pengguna, ketik chshdi baris perintah dan ikuti petunjuknya (sekali lagi, saya sarankan /bin/tcshdan buku O'Reilly yang bagus Menggunakan csh dan tcsh , tersedia untuk apa pun yang tidak digunakan).


Sejak saya menulis jawaban ini, saya telah belajar untuk berhenti mengkhawatirkan dan mencintai Bash untuk penggunaan interaktif. Tapi saya masih tidak bisa berurusan dengan cdperilaku default untuk symlink. Saya harus ingat untuk memasukkan ke set -o physicaldalam .bashrcatau .bash_profileuntuk setiap mesin yang saya gunakan.
dodgethesteamroller
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.