現在のディレクトリをプッシュ/ポップしますか?


66

bashを使用して、現在の作業ディレクトリをプッシュおよびポップする方法はありますか?私は書いてみましたbash;cd dir; ./dostuff;exit;が、現在のディレクトリは今dirです。

linux  bash 

回答:


90

あるpushdpopd

Bashは、アクセスしたディレクトリの履歴を保持しますので、お尋ねください。Bashは履歴をスタックに保存し、pushdおよびpopdコマンドを使用してスタックを管理します。

もっと読む

例:

$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me

1
リンクからの抜粋pushd Saves the current directory on the top of the directory stack and then cd to dir. With no arguments, pushd exchanges the top two directories.
マスターチーフ

31

呼び出しbashは、独自の入力を持つ新しいサブシェルを開始します。他のコマンドは、終了するまで実行されません。括弧で実行するコマンドを囲むと、新しいサブシェルも開始されますが、その中のコマンドは実行されます。

( cd dir ; ./dostuff )

1
ブリリアント!別のディレクトリでコマンドを実行するだけで(依存関係を更新するなど)、現在のディレクトリに戻る場合は、プッシュ/ポップする必要はありません。
ダンダスカレスク

12

複数レベルのディレクトリ履歴が必要ない場合は、次のこともできます。

cd foo
# do your stuff in foo
cd -

pushd/ popdに比べて、これは、cd foo失敗するとで間違ったディレクトリに移動するという欠点がありますcd -

(おそらく、cd -外部のスクリプトの方が便利です。「今の状態に戻りましょう。」)


4

エイリアスを使用してディレクトリの変更を追跡し、「cd」を使用して、「cd。」を使用していた場所に戻るか、「cd ..」などを使用して2つ戻ることができます。

alias pushdd="pushd \$PWD > /dev/null"
alias cd='pushdd;cd'
alias ssh='ssh -A'
alias soc='source ~/.bashrc'
#below to go back to a previous directory (or more)
alias popdd='popd >/dev/null'
alias cd.='popdd'
alias cd..='popdd;popdd'
alias cd...='popdd;popdd;popdd'
alias cd....='popdd;popdd;popdd;popdd'
#below to remove directories from the stack only (do not 'cd' anywhere)
alias .cd='popd -n +0'
alias ..cd='popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0'

1
このコードが何をするのか詳細に説明できますか?
bwDraco

それは賢いです。pushdとpopdの周りには、好きなことをするためのエイリアスがあります。常にディレクトリスタックを使用しています。私は人々がどこかでcdを見て、カットアンドペーストする前のディレクトリを探してスクロールバックするのを嫌います。クォータが原因でほとんどの作業をホームディレクトリで実行できないため、ネットワーク上のプールされたストレージを使用する必要があります。
マイケル・マシューズ

1
エイリアスは..cd十分堅牢ですか?スタックから最後の10個のアイテムのみを削除するようです。
レイノルズnlp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.