web-dev-qa-db-ja.com

bashで複数回CDを戻す方法はありますか?

私はよくcd -を使用して、元の場所に戻ります。 bashでこれを複数回行うにはどうすればよいですか?または、zshや他のツールがこれをサポートしますか?

60
timpone

Zshには、auto_pushdオプション。このオプションは、cdpushdのように動作させます。次に、popdを使用して前のディレクトリに戻ることができます。

~ $ setopt auto_pushd
~ $ cd /
/ $ cd /var
/var $ cd /usr
/usr $ dirs
/usr /var / ~
/usr $ popd
/var $ popd
/ $ popd
~ $

Bashでは、cdpushdにエイリアスできます。

alias cd=pushd

これの1つの欠点は、cdの3つのフラグを失うことです。 cdヘルプエントリから:

-L強制的にシンボリックリンクをたどる
-Pシンボリックリンクをたどらずに物理ディレクトリ構造を使用します
-e -Pオプションが指定されていて、現在の作業ディレクトリを正常に特定できない場合は、ゼロ以外のステータスで終了します

エイリアスの代わりに実際のcdビルトインを使用する必要がある場合は、次のいずれかを使用できます。

  • 'cd'-コマンドを引用すると、シェルはエイリアスを解決せず、通常のCDを使用します。
  • \cd-引用文字をバックスラッシュで囲みます。 Wordの1文字を引用すると、シェルはWord全体を引用として扱います。
  • builtin cd-これは、エイリアスの代わりに組み込みを使用するようにシェルに直接指示します。
53
user26112

以下は、ディレクトリをブックマークして便利な場所にジャンプするための、すばやく簡単な方法です。

$ a() { alias $1="cd $PWD"; }

どこかに行って次のように入力してください:

$ a 1

これで、現在のディレクトリをcdする1というコマンドがあります。後でタイプするだけです:

$ 1

そして、そのディレクトリに戻ります。これは非常に便利です。

24
David Plumpton

bash

この問題を解決するスクリプトを見つけました。これを使用すると、cd --と入力して、使用した最後の10個のディレクトリを表示できます。次のようになります。

0  ~/Documents/onedir
1  ~/Music/anotherdir
2  ~/Music/thirddir
3  ~/etc/etc

~/Music/thirddirに移動するには、単にcd -2と入力します

http://www.geocities.com/h2428/petar/bash_acd.htm

zsh

oh-my-zshはこのためのいくつかの本当に素晴らしい機能を提供します(少なくともこれを設定するのはoh-my-zshだと思います)。

基本的に、ddirs -v | head -10のエイリアスです

dirsはzsh組み込みコマンドであり、最後にアクセスしたディレクトリを表示します。

また、1cd -1にエイリアスされ、すべての数値に対して9にエイリアスされます。

実際には、次のように機能します。

$ pwd
/home/me/Documents/gems/Java_regex/lib

$ d
0       ~/Documents/gems/Java_regex/lib
1       ~/Documents/gems/Java_regex
2       ~/Documents/gems
3       ~/Documents
4       ~

$ 2
~/Documents/gems

$ pwd
/home/me/Documents/gems
19
Dean

Bashに組み込まれているpushdを使用して、新しい作業ディレクトリをディレクトリスタックにプッシュできます。前の作業ディレクトリに戻るには、popdを使用してスタックのディレクトリをポップします。

7
Thomas Nyman

私は commandlinef で見つけた単純な関数をずっと前に使用しています

 up() { local x='';for i in $(seq ${1:-1});do x="$x../"; done;cd $x; }

(私のosxに追加.profileは魅力のように機能します)

0
Kris