popd / pushdパスのスタックの削除またはクリア


39

pushd何回も実行した後、パスのスタック全体をクリアしたいと思います。

popdスタック内のすべてのアイテムはどのようになりますか?

私はしたいのですがpopd、スタックしているどのように多くの知らなくても?

bashマニュアルはこれをカバーしていないようです

なぜこれを知る必要があるのですか?私は気難しいし、スタックをきれいにします。


1
ところで、完全なbashマニュアルはgnu.orgで終わりました。1ページのバージョンですべてを使用すると、そこにあるものを見つけやすくなります。
jw013

ああ、Googleがそのインデックスを作成してくれたらいいのに。ありがとう@ jw013
chrisjlee

回答:


47

dirs -c あなたが探しているものです。


1
この行い、スタックを空にしますが、ないない、スタック底から作業ディレクトリを復元
Eliranマルカ

8

スタック空にし、スタックの下部から作業ディレクトリ復元するには、次のいずれかを実行します。

  • からそのディレクトリを取得し、そのディレクトリdirsに変更し、スタックをクリアします。

    cd "$(dirs -l -0)" && dirs -c

    -lここでのオプションは確かに我々がしようとした場合、我々は失敗しないようにするために、完全なパスをリストするcd~、そして-0スタック底から最初のエントリを検索します。

    @ jw013は、パスの展開を回避することにより、このコマンドをより堅牢にすることを提案しました。

    pushd -0 && dirs -c
  • または、popdエラー(popdディレクトリスタックが空のときの呼び出しのステータス)が発生するまで:

    while (( $? == 0 )); do popd; done

1
最初の方法はまさに私が望んでいたものです。私の場合、2番目の呼び出しpushdは数回呼び出してから機能しませんでした。次に、中央のディレクトリの1つを削除し、popd展開しようとして失敗しました。私が始めたところに戻るには、真ん中の盗聴されたものをすべて飛び越える必要がありました。
チャックウィルバー

右@ChuckWilbur-dirスタックをスクランブルした場合、あなたをpopd救うことはありません:)
エリランマルカ

pushd -0代わりにした方が良いですcd "$(dirs ...)"
jw013

@ jw013どうして?これは、ディレクトリスタックをさらに混乱させます(ここでクリアしようとしています。)
エリランマルカ

1
cd "$(...)"使用例の90%、おそらく99%で動作しpushd -0ますが、100%と自信を持って言えます。シェル内のファイル/ディレクトリパスの拡張に関連する潜在的な落とし穴とエッジケースが非常に多いため、最も堅牢なことは、それを完全に回避することpushd -0です。これは非常に簡潔です。リスクを取らなければ、奇妙なエッジケースのバグに巻き込まれる可能性はありません。Unixファイル/パス名に関連する頭痛の種についてさらに読みたい場合は、出発点としてmywiki.wooledge.org/ParsingLs
jw013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.