マイナスのエイリアスを解除する方法は?


83

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

alias grep="grep --color=always"

だから代わりに私は入力しました:

alias grep=grep --color=always

私を残して:

--color=always
grep=grep

私のエイリアスで。

--color = alwaysを使用してクリーンアップしようとすると、次のようunalias --colorになります。

bash: unalias: --: invalid option
unalias: usage: unalias [-a] name [name ...]

エスケープ、クォート、物triedいを試みましたが、コマンドをアンエイリアスで混乱を解消する方法がわかりません。

(私は再起動がトリックを行うことを知っていますが、確かに別の方法が必要です)


13
ハハ、今、私もそれで立ち往生し、それに取り組んでいます編集:chorobaの答えが私のために働いたように見える
-asmith

9
昔のことを思い出させてくれecho > \\?\c:\windows\x.たり、rm -rf * ~偶然にその時を思い出したりします。
ジェイソンC

回答:


127

--引数の前に追加することで、コマンド内のダッシュを解釈する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

19
ファイルの場合も同様に有効な方法は、これを回避するファイルへのパスを使用することです。だからls ./-blaand を使用できますrm ./-bla(または、フルパスを指定します(あなたの場合はもっと簡単です))。明らかに、これはエイリアスでは機能しません!
ミュザー


93

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

unalias whatever --color

9
確かに機能しますが、+ 1ですが、他の解決策は少しきれいです:)
Requist

1
確かに、もちろん:-)
choroba

unalias unalias --color
クール

3

迅速なソリューション

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

unalias grep --color


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

あなたは間違ったコマンドalias grep=grep --color=alwaysを与え"..."ます。

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

    --color=always
    grep=grep

    そのため、両方の設定を解除する必要があります。

  • なぜこれが起こったのですか?エイリアスの総観ではそれが1行に複数の逢引を行うことが可能であることを意味します。
    ...

    エイリアス:エイリアス[-p] [名前[=値] ...]

    出力でhelp aliasはシノプティックman bashを読むことができますが、同じ行でリストと割り当てを同時に行うこともできます:

    引数が指定されると、値が指定された名前ごとにエイリアスが定義されます。 値の末尾にスペースがあると、エイリアスが展開されたときに次の単語のエイリアス置換がチェックされます。 値が指定されていない引数リストの名前ごとに、エイリアスの名前と値が出力されます...

  • 最初のもの--colorだけを設定解除する問題があります
    これalias、シェルによってオプションとして解釈されるためです。これを避けるには、bashシェルに、それに続くものはオプションではないことを伝える必要があります。

  • Linux聖杯manこの場合、これはこのman bashような状況で役立つ宝物でいっぱいです。
    以下から読むことができますman bash

    -A-オプションの終了を通知し、それ以降のオプション処理を無効にします。 -以降の引数は、ファイル名と引数として扱われます。-の引数は-と同等です。

    他の回答で報告されているように、POSIXの方法は特殊文字の組み合わせを使用すること--です。

    unalias -- --color
  • しかし、なぜunalias grep --color働いているのですか?私は使用せずに意味--
    それが働いたとしてaliasも、ためunaliasには、(再び1時間に複数の名前を与えることが可能です[...])。

    unalias: unalias [-a] name [name ...]

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

    これが機能することは、すべてのエイリアスを消去しないこのコマンド(この目的のために開かれたシェルから)からでも見ることができます:

    unalias whatever -a

最後の発言

man bash報告されている数少ないものの中のバグセクションでは、あなたは読むことができます:-)

エイリアスは、いくつかの用途で混乱を招きます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.