gnome-terminal: как сохранить символические ссылки рабочего каталога при открытии новой вкладки?

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

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

5
задан Ian Mackinnon
источник

3 ответов

Я подозреваю, что нет действительно хороший ответ на это. 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'ы подход. В частности, если вы запускаете много вкладок сразу, все выполняют фоновые задачи, вы можете очень хорошо оказаться в" неправильном " каталоге при открытии новой вкладки.

5
отвечен Jander 2010-12-05 22:16:36
источник

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

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

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

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

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

5
отвечен ShreevatsaR 2011-11-11 08:08:34
источник

нашел этот вопрос не решен, как Гном-Шелл 3.14.4.

обходной путь будет использовать переменную оболочки bash SHLVL (которая увеличивается на 1 при каждом запуске bash).bashrc, as following

# bash login shell would be at level 1.
[[ $SHLVL -eq 2 ]] && cd
-1
отвечен gnarendran142 2017-06-05 10:24:02
источник

Другие вопросы bash bashrc gnome gnome-terminal linux