pushd
とpopd
の両方の実際の使用法は何ですかcd
およびcd -
よりもこれら2つのコマンドを使用する利点がある場合は?
EDIT :これらのコマンドの両方の使用例、またはディレクトリとスタックを維持する理由(タブ補完がある場合、cd -
、短縮のエイリアスcd ..
など)。
回答
pushd
、 popd
、および dirs
は、シェル組み込みであり、 ディレクトリスタックを操作できます。これを使用してディレクトリを変更できますが、元のディレクトリに戻ります。
たとえば
次のディレクトリで起動します。
$ pwd /home/saml/somedir $ ls dir1 dir2 dir3
dir1にプッシュ
$ pushd dir1 ~/somedir/dir1 ~/somedir $ dirs ~/somedir/dir1 ~/somedir
dirs
コマンドは、スタックに2つのディレクトリがあることを確認します。 dir1
と元のディレクトリsomedir
。 注:現在の”現在の”ディレクトリは~/somedir/dir1
です。
../dir3にプッシュされます(現在はdir1
内にあるため)
$ pushd ../dir3 ~/somedir/dir3 ~/somedir/dir1 ~/somedir $ dirs ~/somedir/dir3 ~/somedir/dir1 ~/somedir $ pwd /home/saml/somedir/dir3
dirs
は、スタックに3つのディレクトリがあることを示しています。dir3
、dir1
、およびsomedir
。方向に注意してください。すべての新しいディレクトリが左側に追加されます。ディレクトリのポップを開始するとオフの場合、「左からも表示されます。
ディレクトリを手動で../dir2
$ cd ../dir2 $ pwd /home/saml/somedir/dir2 $ dirs ~/somedir/dir2 ~/somedir/dir1 ~/somedir
ディレクトリのポップを開始します
$ popd ~/somedir/dir1 ~/somedir $ pwd /home/saml/somedir/dir1
dir1
にポップバックしたことに注意してください。
もう一度ポップ…
$ popd ~/somedir $ pwd /home/saml/somedir
そして、開始した場所に戻ります、somedir
。
少し混乱するかもしれませんが、スタックの頭kは、現在いるディレクトリです。したがって、somedir
に戻ると、dirs
に次のように表示されますが、
$ dirs ~/somedir
スタックは実際には空です。
$ popd bash: popd: directory stack empty
コメント
?
回答
pushd
およびpopd
コマンドの非常に便利な使用例複数のフォルダを同時に操作する場合。
スタックは列挙されているため、非常に簡単にナビゲートできます。つまり、作業中に複数の作業フォルダを自由に使用できます。
以下の簡単な例を参照してください。
まず、フォルダ構造の例を作成しましょう。
user@vb:~$ mkdir navigate user@vb:~/navigate$ mkdir dir1 user@vb:~/navigate$ mkdir dir2 user@vb:~/navigate$ mkdir dir3
次に、すべてのフォルダをスタックに追加できます。 :
user@vb:~/navigate$ pushd dir1/ ~/navigate/dir1 ~/navigate user@vb:~/navigate/dir1$ pushd ../dir2/ ~/navigate/dir2 ~/navigate/dir1 ~/navigate user@vb:~/navigate/dir2$ pushd ../dir3/ ~/navigate/dir3 ~/navigate/dir2 ~/navigate/dir1 ~/navigate
次の方法で検索できます:
user@vb:~/navigate/dir3$ dirs -v 0 ~/navigate/dir3 1 ~/navigate/dir2 2 ~/navigate/dir1 3 ~/navigate
安全にナビゲートするには、最後の(ゼロ)フォルダは常に書き換えられるため、2回追加する必要があります。
user@vb:~/navigate/dir3$ pushd . user@vb:~/navigate/dir3$ dirs -v 0 ~/navigate/dir3 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate
これで、これらのフォルダをジャンプして操作できます。フォルダのエイリアスと同様にスタックします。次の部分は自明だと思います:
user@vb:~/navigate/dir3$ cd ~4 user@vb:~/navigate$ dirs -v 0 ~/navigate 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate user@vb:~/navigate$ cd ~3 user@vb:~/navigate/dir1$ dirs -v 0 ~/navigate/dir1 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate user@vb:~/navigate/dir1$ touch text.txt user@vb:~/navigate/dir1$ cp text.txt ~2 user@vb:~/navigate/dir1$ ls ~2 text.txt user@vb:~/navigate/dir1$ dirs -v 0 ~/navigate/dir1 1 ~/navigate/dir3 2 ~/navigate/dir2 3 ~/navigate/dir1 4 ~/navigate
追加のヒントは、dirs -v
のエイリアスを作成します。
例:
# In ~/.bashrc alias dirs="dirs -v"
コメント
- そして、
dirs -c
- +1でスタックをクリアできます。実際にいくつかの実用的な例を挙げています。 ‘は、pushd / popdがmanページから何をするかを簡単に確認できますが、dirsとcd〜#は最初はわかりません。
- 使用することもできます。代わりに、この種のワークフローのfasdのようなソリューションですが、
- @Jun、’ s ” mkdir dir {1,2,3} “で3つのディレクトリを一度に作成できます。
- @JunMurakami今年は私の年になりました! Happy 2020!
回答
cdだけではできないことをdirsスタックを使用する簡単な使用例の1つは、 :
pushd .
は現在のディレクトリXXをdirs
スタックに追加します。その後、cd
を使用して移動でき、XXに戻るには、「遠く」にいるかどうかに関係なく、popd
を実行するだけです。ディレクトリツリー(複数のレベルを飛び越えたり、横向きなど)。 bashスクリプトで特に役立ちます。
コメント
- これは私が最も頻繁に利用する機能だと思います。
pushd
/popd
はcd
から独立して動作するため、より安定したものとして使用できます。cd -
よりブックマーク。 - 私にとってこれは真実ではありません。 cdを使用するたびに、スタックが変更されます。
- zshを使用するのは大変でしたが、bashに変更すると、正常に機能します
- これが比較に関する唯一の実質的な答えです。 cd-、IMO付き。 fooをプッシュしたかどうかについて。 <ランダムなディレクトリ変更>; popdはa = fooよりも価値があります。 cd $ a; <ランダムなディレクトリ変更>; cd $ a …スクリプトの場合、前者(pushd)では構文上の利便性はわずかですが、後者([explicit]変数!)では明瞭さが大幅に向上しています。インタラクティブセッションの場合、そもそもディレクトリ階層が適切に整理されていると思います。迷子になった場合は、cd〜 / back / to / obvious / pathを実行してください。
- @HarendraSingh ‘
AUTO_PUSHD
が設定されていませんか?cd
がpushd
のように動作し、設定を解除すると、’に戻ります。 “通常の動作”。
回答
pushd
およびpopd
を使用すると、スタック上のディレクトリを操作できます。
ディレクトリをpushd
すると、現在のディレクトリがスタックに配置され、ディレクトリがパラメータとして指定されたディレクトリに変更されます。
popd
を使用すると、スタック上のディレクトリに戻ることができます。
繰り返すと、ディレクトリトラバーサルは一種の保存状態になり、保存したディレクトリとは逆の順序で保存したディレクトリに戻ることができます。
回答
bash の場合、基本的に:cdを使用する代わりにpushd
を使用してディレクトリを変更します。実際の使用法:訪問したディレクトリの履歴が保存され(正しく:スタックされます)、それらを切り替えることができます:
pushd /home; pushd /var; pushd log
スタックを表示するには、
およびナビゲーションを簡単にするため(” stack-entries “の番号を取得するには:
dirs -v
出力:
me@myhost:/home$ dirs -v 0 /home 1 /var 2 /tmp
次に、これらの数値をと~
のように:
cd ~1
ただし、これらの番号は現在再配置されており、” 0 “が変更されるため、ディレクトリを2回pushd
上の位置に移動します(または位置0のダミー)のように:
me@myhost:/home$ dirs -v 0 /home 1 /home 2 /var 3 /tmp
これで1..3はその位置を保持します
(現在のディレクトリをスタック/履歴から削除するには、popd
)
回答
pushd / popdは非常に単純な概念であり、人々はこれらのコマンドを「ディレクトリスタックを操作する」コマンドとして定義することで教える傾向があるため、理解するのに時間がかかりました。これは非常に混乱します。
別の見方をします:
pushd [folder_name] -[folder_name]にcdし、 document 宛先がディレクトリスタックの[folder_name]であり、最上位ディレクトリにあるスタック内は常に現在のディレクトリになります
popd -最初にcdします次に、スタックの最上位にあるディレクトリレコードを削除し、ドキュメントを削除します(dirスタックから削除します)
dirs -ディレクトリスタックを出力します(左端のエントリが現在のディレクトリ(スタックの最上位)であるディレクトリDbとして扱うことができます
したがって、最も一般的な2つの使用例は次のとおりです。
使用例1:プッシュとポップを使用してナビゲートする
root@mypc:/main/$ ls dir1 dir2 dir3 dir4 root@mypc:/main/$ dirs # prints the current stack /main root@mypc:/main/$ pushd dir1 # Will cd to dir1 and document dir1 in dir stack, stack is now: /main/dir1 /main root@mypc:/main/dir1$ # I am now in /main/dir1 root@mypc:/main/dir1$ # Now let"s go wild and document whatever I want root@mypc:/main/dir1$ pushd ../dir2 root@mypc:/main/dir2$ # Woo I am in /main/dir2 root@mypc:/main/dir2$ pushd ../dir3 root@mypc:/main/dir3$ # Woo I am in /main/dir3 root@mypc:/main/dir3$ pushd ../dir4 root@mypc:/main/dir4$ # Woo I am in /main/dir4 root@mypc:/main/dir4$ dirs # Now dir stack is: /main/dir4 /main/dir3 /main/dir2 /main/dir1 /main
言いましょう文書化したフォルダに戻りたいので、上記を実行しました!
手動でcdすると、最上位のディレクトリスタックエントリ(常に現在のディレクトリ)に影響することに注意してください
root@mypc:/main/dir4$ cd .. # Now dir stack is: # (note that /main appear in the leftmost as well which is the top of the stack) /main /main/dir3 /main/dir2 /main/dir1 /main root@mypc:/main$
今すぐ後方に移動しましょう:
root@mypc:/main$ popd root@mypc:/main$ # Still in /main since it was at the top of the dir stack root@mypc:/main$ dirs # Stack is now: /main/dir3 /main/dir2 /main/dir1 /main root@mypc:/main$ popd root@mypc:/main/dir3$ popd # Woo in dir3 now, about to navigate to dir2 root@mypc:/main/dir2$ popd # Woo in dir2, about to navigate to dir1 root@mypc:/main/dir1$ dirs # Stack is now: /main
ここでも、必要なディレクトリを文書化できます次に、手動で別のディレクトリに移動すると、スタックに挿入したドキュメント化されたディレクトリに簡単に戻ることができます。
ユースケース2:数値スタックインデックスを使用したナビゲート
pushd dir4 dir3 dir2 dir1を使用してプッシュしたとすると、dir-vを実行すると次のように表示されます。
root@mypc:/main$ dirs -v 0 /main/dir1 (this is the current dir you are in always) 1 /main/dir2 2 /main/dir3 3 /main/dir4
スタックインデックスを使用してディレクトリを含むLinux操作を実行できるようになりました:
root@mypc:/main$ cp ~2/temp.txt ~3/new_temp.txt # this will run in the background, something like: # cp /main/dir2/temp.txt /main/dir3/new_temp.txt
特定のファイルを削除することもできますdirスタックからのエントリ:
root@mypc:/main$ popd ~4
「ドキュメント化」という言葉を使用するか、dirスタックをある種のDbが単純化するものとして考えてください。コンセプト!
回答
簡単に言えば、3つ以上のディレクトリ間を移動する必要がある場合、通常は数回戻る&は、cd -
が2つのフォルダを超えるもので切り取られないためです。
たとえば、バッファの履歴を確認したり、長いパスをタブで完了したりして、以前の長いパスを取り戻そうとする代わりに、重要なパスを積み重ねるだけで、必要に応じて、番号だけでそれらに簡単に移動できます。複雑なディレクトリ構造と長いパスの間を移動すると、スムーズで迅速になります。
組み込み機能を使用すると、スタックを並べ替えたり、不要になったディレクトリをポップアウトしたりできるため、ワークフローに柔軟性を持たせることができます。
ディレクトリスタックは、複数のディレクトリにまたがる操作のスクリプトでも同様に使用できます。
回答
I dirs / popd / pushdの使用法が少し不快であることがわかりました。次のコードを.aliasに追加することで、tcshで個人的な解決策を思いつきました。
foreach b (. , - 0 1 2 3 4 5 6 7 8 9 ) alias p$b "set a=`pwd`; echo $a >! ~/.mydir"$b alias cd$b "cd "`cat ~/.mydir"$b"`"" alias del$b "rm -v ~/.mydir"$b alias home$b "set a="~"; echo $a >! ~/.mydir"$b end alias cdl "grep / ~/.mydir*"
このようにして、たとえば「p。」をエイリアスして現在の作業ディレクトリをファイル〜/ .mydir。に保存し、「cd。」をエイリアスして、いつでもどこでもそのディレクトリを復元します。「del。」は対応するファイルを削除します。 「home。」はディレクトリをホームディレクトリに設定します(cd; p。と同等)。「cdl」は保存されたディレクトリを一覧表示します。〜 / Dropbox / .mydir $ b(またはその他のクラウドサービスなど)を使用する場合は注意してください。例:ownCloud)〜/ .mydir $ bの代わりに、スマートな方法が得られますさまざまなアカウントやマシンで好みのディレクトリを使用するには。
回答
cd
およびcd -
を使用すると、最近使用した2つのディレクトリのみを切り替えることができます。 「ディレクトリワーキングセット」のサイズは2です。
pushd
を使用すると、任意の数のディレクトリをワーキングセットに保持できます。
ほとんどの場合、cd
ではなくpushd
を使用します。 pushd directory_name
を使用してアクティブディレクトリのスタックを構築したら、pushd ~#
を使用してそれらの間を1日中ジャンプできます。
pushd dir1 pushd ../dir2 pushd /full/path/to/dir3 # There are now three directories in the stack. pushd ~3 pushd ~2 # The same three directories are still on the stack, # just in a different order.
popd
を使用することはめったにありませんが、完了したことがわかっているときにスタックからディレクトリを削除したい場合に限ります。そのディレクトリを使用します。
ディレクトリに移動してスタックから削除します:
popd ~2
現在のディレクトリにとどまり、別のディレクトリをスタック:
popd +2
複数のターミナルウィンドウまたはタブを開いた状態(アクティブになっているディレクトリごとに1つ)に似た作業スタイルになります。動作中)、しかしすべてが1つの端末にあります。これにより、画面のスペースが節約されます。さらに、ディレクトリパスがすべて1つのシェルで利用できるため、次のようなことができます。
- 現在作業しているディレクトリ間でファイルをコピーする
- 別のディレクトリに移動せずにファイルを表示または編集する
例:
cp ~2/myfile.txt ~4 less ~2/myfile.txt
tcsh
(bash
ではありません)。ディレクトリスタックをファイルに保存して後で復元することもできます。
保存:
dirs -S ~/dirstack
復元:
dirs -L ~/dirstack
それ以外の場合は、iv id = “bc4f8b844bを置き換えるだけです。 tcsh
で使用する=
を使用したbash
の例の “>
。
pushd =2 popd =4 popd +1
回答
bash_profileと.bashrcでこのように使用しています
vi .bash_profile alias dirs="dirs -v" source d.sh :wq vi .bashrc alias dirs="dirs -v" :wq vi d.sh pushd ~/Documents/GIT/seiso-data pushd ~/Documents/GIT/ewe/EosRegistry pushd ~/Documents/GIT_LODGING/site-cookbooks pushd ~/Documents/CHEF_LODGING pushd . :wq
ヘルプディレクトリ間を移動して、端末で最後に使用されたものに移動します。 🙂 cd〜stackednumber
divを使用してpushdではなくpopdを使用できるようになることを願っています>
cd -
、短縮用のエイリアスcd ..
など)。pushd
&スクリプトb / cのpopd
を使用すると、どこから来たのかを覚えておく必要がなくなります。いつでもpopd
から戻ることができます。私が来た場所。私は通常、popd >/dev/null 2>&1
を実行してサイレントにします。私は毎日cd-をシェルで使用しています。この記事には、他にも時間節約のヒントがいくつかあります: thegeekstuff.com/2008/10/ … 。cd -
は最後のディレクトリのみを追跡するため、@ Garrett @ slmです。内部的にディレクトリも変更する関数を呼び出すと、問題が発生する可能性があります。その場合、関数は、ポップバックするディレクトリではなく、現在のディレクトリにリセットされることになります。 pushd / popdが最も安全な方法です。注:’理論をテストしていません。~/somedir/dir3
に戻らないのはなぜですか。 id = “9a953f50f0”>