これを行う有効な方法があるかどうかわかりません。しかし、常に可能性があるかどうかを見たいと思っていました。pushd popdグローバルディレクトリスタック?
pushd、popd、およびdirsは、あなたが最近訪れたディレクトリ間のコピーなどの多くの目的に役立つことは知っています。
しかし、グローバルスタックを維持する方法はありますか?そのため、ある端末で何か(pushdを使用して)プッシュすると、別の端末に反映されます(そのログインセッションの端末だけかもしれません)。
これを行う有効な方法があるかどうかわかりません。しかし、常に可能性があるかどうかを見たいと思っていました。pushd popdグローバルディレクトリスタック?
pushd、popd、およびdirsは、あなたが最近訪れたディレクトリ間のコピーなどの多くの目的に役立つことは知っています。
しかし、グローバルスタックを維持する方法はありますか?そのため、ある端末で何か(pushdを使用して)プッシュすると、別の端末に反映されます(そのログインセッションの端末だけかもしれません)。
これは、シェル関数とテンポラリファイルのペアで行うことができます。
あなたの一時ファイルを「/home/me/.directory_stack
」のようなものという名前になり、単にディレクトリのリストが含まれます
/home/me
/etc
/var/log
あなたの「push_directory」関数は、単にリストにカレントディレクトリを追加します。 'pop_directory'関数はリストから最新のものを取り出し、そのディレクトリに切り替えます。このようなファイルにスタックを格納することで、開いているすべての端末に情報が存在することが保証されます(リブートしても)。ここで
いくつかの例の機能(警告:のみ軽くテスト)されている
directory_stack=/home/me/.directory_stack
function push_dir() {
echo $(pwd) >> $directory_stack
cd $1
}
function pop_dir() {
[ ! -s $directory_stack ] && return
newdir=$(sed -n '$p' $directory_stack)
sed -i -e '$d' $directory_stack
cd $newdir
}
は、あなたの.bashrc
にそれを追加し、彼らは自動的にあなたがシェルにログインするたびに定義されます。
おそらく、いくつかのシェル関数を記述して、pushd
とpopd
の代わりに使用したいと思うでしょう。あなたが戻って、ファイルの最後の行を削除する小さなプログラムを書く場合
mypushd() { echo "$1" >> ~/.dir_stack ; cd "$1" }
mypopd() { dir=`tail -1 ~/.dir_stack` ; cd "$dir" ;
foo=`wc -l ~/.dir_stack | egrep -o '[0-9]+'` ;
((foo=$foo-1)) ;
mv ~/.dir_stack ~/.dir_stack_old ;
head -n $foo ~/.dir_stack_old > ~/.dir_stack }
あなたは醜いビットの一部を取り除くことができ、次の(未テスト)機能のようなものは、仕事をするかもしれません。
ありがとう!これはすばやく簡単です。私は必要に応じてこれをpython/perlで複製しようとします。私は最初に、bash自体にこれを行うための環境変数があるかどうか考えていました。私はそうじゃないと思う。 –
PythonやPerlでこれをやり直す際の問題は、 'chdir(2)'システムコールが現在のプロセスにしか影響しないということです。これをPythonで本当にしたいのであれば、[IPython](http://ipython.org/)を見てみることもできます。インタラクティブなコンピューティングタスクの代わりにシェルを使用しようとしています。しかし、シェルを使い続けたい場合は、これらの関数を他の言語で再現しようと時間を無駄にしないでください。[btaの答え](http://stackoverflow.com/a/9916812/377270)莫大な労力を費やすことなくやり遂げることができます。 – sarnold
Pushdとpopdは組み込みコマンドであり、dirスタックは各シェルプロセスによって維持されます。はい、グローバルスタックを持つ方法があります。実際には多くの方法があります。自分で何かしようとしましたか? –