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/?

Val
sumber

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".

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

Cara alternatif adalah menjalankan:

cd $(/bin/pwd)/..
Jlliagre
sumber
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).

dodgethesteamroller
sumber
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