親ディレクトリに移動したいとき、cd ,,
ではなく誤ってcd ..
と入力してしまうことがあります。これらのステートメントが同じであるとbashに見なす方法はありますか?コマンドでコンマを使用することはありません。理想的には、,,
を..
にエイリアスしたいと思います。私がこれを試したとき、それはうまくいきませんでした。なぜこれはうまくいかなかったのですか?他にどのようにこの問題に取り組むことができますか?
$ alias ,,=..
$ cd ,,
-bash: cd: ,,: No such file or directory
zsh
を使用している場合はalias -g ,,=".."
が必要ですが、これによりcd
を使用した場合だけでなく、 ","があらゆる場所で展開されます。
man zshbuiltins
から:
-g
フラグが存在する場合は、グローバルエイリアスを定義します。グローバルエイリアスは、コマンドの位置にない場合でも展開されます。
bash
に制限されている場合(質問は bash でタグ付けされているため)、以下をお読みください。
これは、要求に応じて、純粋なエイリアスのソリューションですただしこれは、必要以上にユーザーをイライラさせます(私の投稿の最後にある警告を参照) )。
引用man bash
:
エイリアス値の最後の文字が空白の場合、エイリアスに続く次のコマンドWordでもエイリアス展開がチェックされます。
したがって、cd
にエイリアスを追加し(次の引数を展開できるようにするため)、,,
を..
にエイリアスするだけで十分です。ほら
alias cd='cd '
alias ,,='..'
あなたが必要とするものを正確に与えます。
これはbash
(およびそのalias
実装)だけでなく、すべてのPOSIXコンパイルシェルにも当てはまることに注意してください。 man 1p alias
からの例の引用(このマニュアルでは、この機能は例を介してのみ明示的に説明されていません):
それ自体がエイリアス名である引数を処理できるようにNohupを設定します。
alias Nohup="Nohup "
警告:@PeterCordesがコメントに書き込むと、書き込み時にotherエイリアスが自動的に展開されますcd
の後。 grep
という名前のディレクトリに変更したいが、grep
がcd \grep
のエイリアスである場合は、grep --color=auto
を書き込む必要がある場合があります。バックスラッシュがないと、cd
は「引数が多すぎます」エラーを報告します(一度に2つのディレクトリにcd
することはできません)!。
エイリアスはこれを行うためのものではありませんが、実際のcd
のラッパーであるcd
という関数を作成できます。これは私のために働きます! .bash_profile
または選択したプロファイルファイルに挿入するだけです。
cd () { if [ "$1" = ",," ]; then builtin cd ..; else builtin cd "$@"; fi; }
または、コメントとかなりのフォーマットで:
cd ()
{
if [ "$1" = ",," ]; then # if first argument is ",,"...
builtin cd .. # call the builtin cd with ".." instead...
else
builtin cd "$@" # else call builtin cd with original arguments
fi
}
[〜#〜]編集[〜#〜]
ここでは、if then else
が&& ||
よりも優れていることを指摘してくれた@derobertに感謝します。また、私は(* facepalm*)この実装はパス以外の引数(つまり、-L -P
)がない場合にのみ機能することを認識しました最初の引数。ですから、cd -L ,,
とタイプするのが悪い習慣がある場合、これは役に立たないでしょう。それを正しく処理するのは簡単なことではないと思います。
エイリアスは、コマンドの最初のワードでなければなりません。また、エイリアスをWordに置き換える必要があるため、スペースは不要です)。
エイリアスを使用すると、文字列をa Wordの代わりに使用できます。これは、単純なコマンドのfirst Wordとして使用されます。
両方のエイリアス..
および,,
することが cd ..
。
$ alias ..="cd .."
$ alias ,,="cd .."
$ cd /tmp && pwd
/tmp
$ ,, && pwd
/
..
でディレクトリを変更する別の方法は、Bashの autocd
機能 を有効にすることです。
shopt -s autocd
名前を入力すると、ディレクトリが自動的に変更されます。
~$ /tmp
cd /tmp
/tmp$
,,
のエイリアスを作成する必要がありますが、alias ,,=..
だけでエイリアスを作成できます
すでにあります アプリ そのためのスクリプト: https://github.com/shyiko/commacd (Stanley Shuyikoとは提携していません)。
commacd
は3つのコマンドをエクスポートします:,
(前にジャンプするため)、,,
(逆方向)および,,,
(後方+前方):それらの3つはすべて、最初にプレフィックスで一致しようとします。結果が見つからない場合にのみ、部分文字列(ファジー)マッチングにフォールバックします
あなたの質問に答えるために、スクリプトはそれが定義する3つの関数にコンマをエイリアスします:
alias ,=_commacd_forward
alias ,,=_commacd_backward
alias ,,,=_commacd_backward_forward