Sembolik bir bağlantıyı izledikten sonra 'cd ..' işlevselliğini geri yükle


13

Terminalde şöyle bir komutla sembolik bir bağlantı oluşturursam

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

ve ardından ile bağlantıyı takip edin

cd symbolicLink

terminal, cwd'nin ~/symbolicLink/aslında gösterilmesine rağmen olduğunu düşünüyor gibi görünüyor ~/path/to/some/directory/(bağlantının ~elbette yapıldığı varsayılarak ). Bunun anlamı, eğer o zaman cd ..geri ~yazılırsam, terminalin 'cwd'nin üstü olduğunu' düşündüğü için.

Ben böyle değiştirmek için ne gerekir cd ..yerine beni alacaktı ~/path/to/some/, yani gerçek üst öğesini ~/path/to/some/directory/?

Yanıtlar:



5

cd -PDavranışta ince bir uyarı var (uzunluk nedeniyle cevap olarak gönderildi):

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

pwdŞimdi ne yazmalı ? Mantıksal olarak, ya

  1. $dir1, önce ve sonra cd -P ..yaparsa veyacd ..cd -- "$(readlink -f)"
  2. /tmp, önce ve sonra cd -P ..yaparsa .cd -- "$(readlink -f)"cd ..

Aslında bunu yapar, yani "üst" pwddizinden sezgisel olarak iki seviye daha yüksektir.


1
Teşekkürler! cd -PKarşılaştığım sorunu hala çözüyor, ancak bilmek hala yararlı.
Val

2

Alternatif bir yol çalıştırmaktır:

cd $(/bin/pwd)/..

2

Acınızı hissediyorum — bashBu davranış nedeniyle temelde etkileşimli kullanım için kırılmış olmayı düşünüyorum .

tcshetkileşimli kullanım için çok daha kullanıcı dostu bir kabuktur. bashProgramlamaya bırakın (birçok komut dosyası dili arasında çok daha iyi alternatifler olduğunda kabuk komut dosyaları yazmakta ısrar ediyorsanız).

Herhangi bir kullanıcı için kabukları değiştirmek için chsh, komut satırına yazın ve komut istemlerini izleyin (yine, tavsiye ederim /bin/tcshve mükemmel O'Reilly kitabı Kullanılan hiçbir şeyin yanında mevcut olmayan csh ve tcsh kullanma ).


Bu cevabı yazdığım için endişelenmeyi bırakmayı ve etkileşimli kullanım için Bash'ı sevmeyi öğrendim. Ama yine de cdsembolik bağların varsayılan davranışıyla ilgilenemiyorum . Ben koymak için hatırlamak zorunda set -o physicalskinTenimde .bashrcveya .bash_profileher makine ben kullanılmak üzere.
dodgethesteamroller
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.