パスにシンボリックリンクが含まれている作業ディレクトリでgnome-terminal
を使用していて、新しいタブを開くと、シンボリックリンクは新しいタブの作業ディレクトリの宛先に展開されます。
新しいタブを開くときにシンボリックリンクを保持する方法はありますか?
これに対する本当に良い答えはないと思います。 gnome-terminal
は、シンボリックリンクが展開されている/proc/<pid>/cwd
を調べることにより、bash
の現在の作業ディレクトリを見つけます(おそらくセキュリティ上の理由で、他に何もない場合)。あるプロセスが別のプロセスの作業ディレクトリを見つけるための別の方法がわかりません。
回避策として、試すことができるいくつかのbashトリックがありますが、以下の[〜#〜]警告[〜#〜]を参照してください! .bashrcの場合:
...
Prompt_COMMAND='pwd >~/.bashlocal_saved_dir'
...
[ -n "$PS1" -a -f ~/.bashlocal_saved_dir ] && cd `cat ~/.bashlocal_saved_dir`
# end of .bashrc
これは2つのことを行います。まず、bashがプロンプトを表示するたびに、最初に現在の作業ディレクトリをホームディレクトリのファイル.bashlocal_saved_dir
に書き込みます。次に、bashが(スクリプトを実行するのではなく)対話的に開始すると、同じファイルに保存されているディレクトリに移動します。これは、新しいインタラクティブbashを開始すると、最後にプロンプトを表示したbashと同じディレクトリで開始されることを意味します。 Enterキーを押すと、bashにプロンプトが再表示され、最後になります。 :)
[〜#〜]警告[〜#〜]:これはハックであり、動作することがわかっているところまでしか試していません。風船ガムと靴ひもを考えてください。それは驚くべき効果をもたらす可能性があり、確かにgnome-terminal
のアプローチほどきれいには機能しません。特に、一度に多数のタブを実行し、すべてがバックグラウンドタスクを実行している場合、新しいタブを開くときに「間違った」ディレクトリに移動する可能性があります。
このバグは buntu Launchpad および GNOME Bugzilla で追跡されています。
これは主にいくつかのディレクトリで私を悩ませるので、私は次のより簡単な回避策を使用します。
/home/username/work
へのシンボリックリンクとして/long/path/named/asdf
があるとします。したがって、gnome-terminalでcd ~/work
を実行し、新しいタブを開いて、フルパスを報告しているターミナルを見つけます。これを修正するには、.bashrc
に次のように入力します。
cd ${PWD/\/long\/path\/named\/asdf/$HOME\/work}
Gnome-terminalが新しいシェルを開始すると、現在のディレクトリが$ PWDで取得され、/long/path/named/asdf
が含まれている場合は、その文字列が$HOME/work
に置き換えられ、cd
sが結果の文字列に置き換えられます。 。 $ PWDに文字列が含まれていない場合、それはcd $PWD
と同等であり、何もしません。
私は大好きです @ ShreevatsaRの答え 。これが発生していることを通知し、すばやくpopd
で元に戻すことができるように拡張すると、次のようになります。
_for sub in \
"${PWD/\/home\/vus\/.cache\/vus\/build/\/vrepos\/build}" \
"${PWD/\/home\/vus\/repos/\/vrepos}"
do
if [ "$sub" != "${PWD}" ] ; then
echo -n "pushd "
pushd "$sub"
break # prevents first pushd from tripping later checks
fi
done
_
Popdショーの使用を含む新しいウィンドウの例(PS1='#Prompt# \[\033[01;34m\]\w\[\033[00;35m\]$(__git_ps1)\[\033[00m\]\$ '
を使用):
_pushd /vrepos/build/2_dev_Ubuntu_Debug /home/vus/.cache/vus/build/2_dev_Ubuntu_Debug
#Prompt# /vrepos/build/2_dev_Ubuntu_Debug$ popd
/home/vus/.cache/vus/build/2_dev_Ubuntu_Debug
#Prompt# /home/vus/.cache/vus/build/2_dev_Ubuntu_Debug$
_