web-dev-qa-db-ja.com

マイナスをunaliasするにはどうすればいいですか?

私の朝のコーヒーは、私が次の引用符を忘れたときにはまだ私の脳に届いていませんでした。

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がその混乱を一掃する方法を理解することはできません。

(私は再起動がトリックをすることを知っていますが、確かに別の方法がなければなりません)

83
Requist

引数の前に--を追加することで、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
127
mtak

エイリアスを設定するのに使ったのと同じトリックを使うだけです。

unalias whatever --color
93
choroba

迅速なソリューション

both間違ったエイリアスを修正するには、単に実行するだけです。

unalias grep --color

何が起こったのか理解する

alias grep=grep --color=alwaysなしで間違ったコマンド"..."を指定した。

  • 2つのエイリアスを設定します--colorgrep。実際、出力の左側にそれを読むことができます(=の左側にあるものはすべて別名のコマンドです)。

    --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 ...]
    

    私が推測できるのは、プログラミングの習慣としては、読み取りルーチンと書き込みルーチンを同じロジックの下に同時に書き込むことです。それで、それはaliasunaliasのオプション解析ルーチンのためでなければなりません。

    これがうまくいくということは、このコマンドから(この目的のために開かれたシェルから)でも見ることができるでしょう。

    unalias whatever -a
    

最後の発言

man bashのバグセクションで報告されたいくつかのことの中であなたは:-)を読むかもしれません

エイリアスは用途によっては混乱します。

3
Hastur