如何对减号取消别名?

Req*_*ist 83 bash bash-alias

当我忘记了以下引文时,我的早晨咖啡还没有到达我的脑海:

alias grep="grep --color=always"
Run Code Online (Sandbox Code Playgroud)

所以我输入:

alias grep=grep --color=always
Run Code Online (Sandbox Code Playgroud)

留给我:

--color=always
grep=grep
Run Code Online (Sandbox Code Playgroud)

在我的别名中。

当我尝试使用 --color=always 清理时,unalias --color我得到:

bash: unalias: --: invalid option
unalias: usage: unalias [-a] name [name ...]
Run Code Online (Sandbox Code Playgroud)

我尝试逃避、引用和乞求,但我不知道如何让突击队 unalias 清理混乱。

(我知道重新启动可以解决问题,但肯定有另一种方法)

mta*_*tak 124

您可以通过--在任何参数之前添加来避免 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:~$
Run Code Online (Sandbox Code Playgroud)

这也适用于其他实用程序,假设您有一个名为-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.
Run Code Online (Sandbox Code Playgroud)

通过--在文件名之前使用,您将删除文件:

mtak@frisbee:~$ rm -- -bla
mtak@frisbee:~$ ls -- -bla
ls: cannot access '-bla': No such file or directory
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,对于文件,同样有效的方法是使用文件路径来避免这种情况;所以你可以使用 `ls ./-bla` 和 `rm ./-bla`(或者指定完整路径,在你的情况下更容易)。显然这不适用于别名! (19认同)

cho*_*oba 91

只需使用您用来设置别名的相同技巧

unalias whatever --color
Run Code Online (Sandbox Code Playgroud)

  • 确实有效,+1,但另一个解决方案更简洁:) (9认同)