私の朝のコーヒーは、私が次の引用符を忘れたときにはまだ私の脳に届いていませんでした。
alias grep="grep --color=always"
だから代わりに私は入力しました:
alias grep=grep --color=always
私を残して:
--color=always
grep=grep
私の別名で。
いつもunalias --color
を使って--color =をクリーンアップしようとすると、
bash: unalias: --: invalid option
unalias: usage: unalias [-a] name [name ...]
私はエスケープし、引用し、物乞いをしようとしましたが、commando unaliasがその混乱を一掃する方法を理解することはできません。
(私は再起動がトリックをすることを知っていますが、確かに別の方法がなければなりません)
引数の前に--
を追加することで、POSIX準拠のシステムがコマンド内のダッシュを解釈しないようにすることができます。
mtak@frisbee:~$ alias grep=grep --color=always
mtak@frisbee:~$ alias | grep color
alias --color='always'
mtak@frisbee:~$ unalias -- --color
mtak@frisbee:~$ alias | grep color
mtak@frisbee:~$
これは他のユーティリティでも動作します。-bla
という名前のファイルがあるとしましょう。 rm
で削除しようとすると、次のエラーが発生します。
mtak@frisbee:~$ ls -- -bla
-bla
mtak@frisbee:~$ rm -bla
rm: invalid option -- 'b'
Try 'rm ./-bla' to remove the file '-bla'.
Try 'rm --help' for more information.
ファイル名の前に--
を使用すると、ファイルを削除します。
mtak@frisbee:~$ rm -- -bla
mtak@frisbee:~$ ls -- -bla
ls: cannot access '-bla': No such file or directory
エイリアスを設定するのに使ったのと同じトリックを使うだけです。
unalias whatever --color
both間違ったエイリアスを修正するには、単に実行するだけです。
unalias grep --color
alias grep=grep --color=always
なしで間違ったコマンド"..."
を指定した。
2つのエイリアスを設定します--color
とgrep
。実際、出力の左側にそれを読むことができます(=
の左側にあるものはすべて別名のコマンドです)。
--color=always
grep=grep
だからあなたは両方の設定を解除する必要があります。
なぜこれが起こったのですか?
aliasの概要にある...
は、1行に複数の代入を行うことが可能であることを意味します。
alias:alias [-p] [名前[=値] ...]
help alias
の出力では概要を読むことができますが、man bash
からそれを読むことができますそれは同時にリストして代入するために同じ行で可能です:
引数が与えられると、値が与えられたそれぞれの名前に対して別名が定義されますvalueの末尾のスペースは次のWordの別名置換をチェックします別名が展開されたとき値が指定されていない引数リスト内の名前ごとに、別名の名前と値が出力されます...
最初の--color
だけで設定を解除するのに問題があります。
これはそれがあなたのシェルによってalias
のオプションとして解釈されるからです。これを避けるためには、それに続くものは選択肢ではないことをあなたのbash
シェルに伝える必要があります。
Linuxの聖杯:man
、この場合はman bash
は貴重な宝物でいっぱいですこのような状況では。man bash
から読むことができます。
- A - オプションの終了を通知し、それ以降のオプション処理を無効にします。 - の後の引数はすべてファイル名および引数として扱われます。 - の引数は - と同等です。
他の回答で報告されているように、POSIXの方法は特殊文字の組み合わせ--
を使うことです。
unalias -- --color
しかし、なぜunalias grep --color
が機能しているのですか?--
を使わずにどういう意味ですか?alias
でもunalias
に対して機能したので、一度に複数の名前を付けることが可能です(ここでも[...]
)。
unalias: unalias [-a] name [name ...]
私が推測できるのは、プログラミングの習慣としては、読み取りルーチンと書き込みルーチンを同じロジックの下に同時に書き込むことです。それで、それはalias
とunalias
のオプション解析ルーチンのためでなければなりません。
これがうまくいくということは、このコマンドから(この目的のために開かれたシェルから)でも見ることができるでしょう。
unalias whatever -a
man bash
のバグセクションで報告されたいくつかのことの中であなたは:-)
を読むかもしれません
エイリアスは用途によっては混乱します。