5

Если я использую gnome-terminal в рабочем каталоге, путь которого включает в себя символические ссылки, и я открываю новую вкладку, символические ссылки будут расширены по назначению в рабочем каталоге новой вкладки.

Есть ли способ сохранить символические ссылки при открытии новой вкладки?

3 ответа3

5

Эта ошибка отслеживается в Ubuntu Launchpad и GNOME Bugzilla.

Так как это в основном раздражает меня только несколькими каталогами, я использую следующий более простой обходной путь.

Предположим, у вас есть /home/username/work как символическая ссылка на /long/path/named/asdf . Таким образом, вы выполняете cd ~/work в gnome-terminal, открываете новую вкладку и находите терминал, сообщающий полный путь. Чтобы это исправить, просто поместите в ваш .bashrc:

cd ${PWD/\/long\/path\/named\/asdf/$HOME\/work}

Когда gnome-терминал запускает новую оболочку, он получает текущий каталог с $ PWD, и если он содержит /long/path/named/asdf , он заменяет эту строку на $HOME/work и cd s на полученную строку. Если $ PWD не содержит строку, она эквивалентна cd $PWD , которая ничего не делает.

5

Я подозреваю, что нет действительно хорошего ответа на это. gnome-terminal находит текущую рабочую директорию bash «S осматривая /proc/<pid>/cwd который имеет символические ссылки расширенные (вероятно , по соображениям безопасности, если ничего другого). Я не знаю другого способа для одного процесса найти рабочий каталог другого процесса.

В качестве обходного пути, вы можете попробовать некоторые трюки, но смотрите ПРЕДУПРЕЖДЕНИЕ ниже! В .bashrc:

...
PROMPT_COMMAND='pwd >~/.bashlocal_saved_dir'
...

[ -n "$PS1" -a -f ~/.bashlocal_saved_dir ] && cd `cat ~/.bashlocal_saved_dir`
# end of .bashrc

Это сделает две вещи. Во-первых, каждый раз, когда bash отображает приглашение, оно сначала записывает свой текущий рабочий каталог в файл .bashlocal_saved_dir в вашем домашнем каталоге. Во-вторых, когда bash запускается в интерактивном режиме (в отличие от запуска скрипта), он изменяется на каталог, хранящийся в том же файле. Это означает, что когда вы запускаете новый интерактивный bash, он запускается в том же каталоге, что и bash, который последний раз отображал свое приглашение. Обратите внимание, что вы можете нажать Enter, чтобы bash снова отобразил свое приглашение, сделав его последним. :)

ВНИМАНИЕ: Это взлом, и я пробовал его только до такой степени, что знаю, что это работает. Вспомните жевательную резинку и шнурки. Это может иметь неожиданные эффекты и, конечно, не будет работать так же чисто, как подход gnome-terminal . В частности, если вы запускаете много вкладок одновременно, все выполняете фоновые задачи, вы вполне можете оказаться в "неправильном" каталоге при открытии новой вкладки.

-1

Обнаружил, что эта проблема не решена в gnome-shell 3.14.4.

Обходным решением будет использование переменной bash Shell SHLVL (которая увеличивается на 1 при каждом запуске bash) в .bashrc следующим образом

# bash login shell would be at level 1.
[[ $SHLVL -eq 2 ]] && cd

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .