web-dev-qa-db-ja.com

「、」を「..」にエイリアスできますか?

親ディレクトリに移動したいとき、cd ,,ではなく誤ってcd ..と入力してしまうことがあります。これらのステートメントが同じであるとbashに見なす方法はありますか?コマンドでコンマを使用することはありません。理想的には、,,..にエイリアスしたいと思います。私がこれを試したとき、それはうまくいきませんでした。なぜこれはうまくいかなかったのですか?他にどのようにこの問題に取り組むことができますか?

$ alias ,,=..
$ cd ,,
-bash: cd: ,,: No such file or directory
41
kilojoules

ZSH:

zshを使用している場合はalias -g ,,=".."が必要ですが、これによりcdを使用した場合だけでなく、 ","があらゆる場所で展開されます。

man zshbuiltinsから:

-gフラグが存在する場合は、グローバルエイリアスを定義します。グローバルエイリアスは、コマンドの位置にない場合でも展開されます。

バッシュ:

bashに制限されている場合(質問は bash でタグ付けされているため)、以下をお読みください。

これは、要求に応じて、純粋なエイリアスのソリューションですただしこれは、必要以上にユーザーをイライラさせます(私の投稿の最後にある警告を参照) )。

引用man bash

エイリアス値の最後の文字が空白の場合、エイリアスに続く次のコマンドWordでもエイリアス展開がチェックされます。

したがって、cdにエイリアスを追加し(次の引数を展開できるようにするため)、,,..にエイリアスするだけで十分です。ほら

alias cd='cd '
alias ,,='..'

あなたが必要とするものを正確に与えます。

これはbash(およびそのalias実装)だけでなく、すべてのPOSIXコンパイルシェルにも当てはまることに注意してください。 man 1p aliasからの例の引用(このマニュアルでは、この機能は例を介してのみ明示的に説明されていません):

  1. それ自体がエイリアス名である引数を処理できるようにNohupを設定します。

           alias Nohup="Nohup "
    

警告:@PeterCordesがコメントに書き込むと、書き込み時にotherエイリアスが自動的に展開されますcdの後。 grepという名前のディレクトリに変更したいが、grepcd \grepのエイリアスである場合は、grep --color=autoを書き込む必要がある場合があります。バックスラッシュがないと、cdは「引数が多すぎます」エラーを報告します(一度に2つのディレクトリにcdすることはできません)!。

45
styrofoam fly

エイリアスはこれを行うためのものではありませんが、実際の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 ,,とタイプするのが悪い習慣がある場合、これは役に立たないでしょう。それを正しく処理するのは簡単なことではないと思います。

58
BenjiWiebe

エイリアスは、コマンドの最初のワードでなければなりません。また、エイリアスをWordに置き換える必要があるため、スペースは不要です)。

Bashリファレンスマニュアル:エイリアス

エイリアスを使用すると、文字列をa Wordの代わりに使用できます。これは、単純なコマンドのfirst Wordとして使用されます。

両方のエイリアス..および,, することが cd ..

$ alias ..="cd .."
$ alias ,,="cd .."
$ cd /tmp && pwd
/tmp
$ ,, && pwd
/
29
Steven

..でディレクトリを変更する別の方法は、Bashの autocd機能 を有効にすることです。

shopt -s autocd 

名前を入力すると、ディレクトリが自動的に変更されます。

~$ /tmp
cd /tmp
/tmp$ 

,,のエイリアスを作成する必要がありますが、alias ,,=..だけでエイリアスを作成できます

3
ilkkachu

すでにあります アプリ そのためのスクリプト: https://github.com/shyiko/commacd (Stanley Shuyikoとは提携していません)。

commacdは3つのコマンドをエクスポートします:,(前にジャンプするため)、,,(逆方向)および,,,(後方+前方):

それらの3つはすべて、最初にプレフィックスで一致しようとします。結果が見つからない場合にのみ、部分文字列(ファジー)マッチングにフォールバックします

あなたの質問に答えるために、スクリプトはそれが定義する3つの関数にコンマをエイリアスします:

alias ,=_commacd_forward
alias ,,=_commacd_backward
alias ,,,=_commacd_backward_forward
2
Doctor Dao