Восстановить функциональность "cd .." после перехода по символической ссылке

Если я создаю символическую ссылку в терминале с помощью команды, подобной

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

, а затем следую по ссылке с

cd symbolicLink

[ 1115] терминал, кажется, думает, что cwd имеет значение ~/symbolicLink/, хотя он фактически показывает ~/path/to/some/directory/ (конечно, при условии, что ссылка была сделана в ~). Это означает, что если я затем наберу cd .., меня снова переведут на ~, потому что терминал «думает», что это родитель cwd.

Что бы мне нужно было изменить, чтобы cd .. вместо этого привело меня к ~/path/to/some/, то есть к реальному родителю ~/path/to/some/directory/?

13
задан 12 August 2013 в 09:32

4 ответа

См. https://stackoverflow.com/questions/10456784/behavior-of-cd-bash-on-symbolic-links .

Вы можете использовать «cd -P» для перехода в «настоящий» родительский каталог. См. Первый комментарий в верхнем ответе о том, как сделать это поведением по умолчанию.

0
ответ дан 12 August 2013 в 09:32

В поведении cd -P есть тонкое предостережение (из-за его длины он опубликован как ответ):

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

Что должен печатать pwd сейчас? Логически, это может быть либо

  1. $dir1, если cd -P .. делает cd .. первым и cd -- "$(readlink -f)" после, либо
  2. /tmp, если cd -P .. делает cd -- "$(readlink -f)" сначала и cd .. потом.

Фактически это делает последнее, а это означает, что pwd интуитивно на два уровня выше, чем «родительский» каталог.

0
ответ дан 12 August 2013 в 09:32

Я чувствую вашу боль - из-за этого поведения я считаю bash в основном сломанным для интерактивного использования.

tcsh - гораздо более удобная оболочка для интерактивного использования. Оставьте bash для программирования (если вы настаиваете на написании сценариев оболочки, когда среди многих языков сценариев есть намного лучшие альтернативы).

Чтобы изменить оболочки для любого пользователя, введите chsh в командной строке и следуйте инструкциям (опять же, я рекомендую /bin/tcsh и превосходную книгу О'Рейли Использование csh и tcsh ). , доступно почти ничего не используется).

0
ответ дан 12 August 2013 в 09:32

Альтернативный способ - запустить:

cd $(/bin/pwd)/..
0
ответ дан 12 August 2013 в 09:32

Другие вопросы по тегам:

Похожие вопросы: