Kum*_*lok 21 bash pointer-aliasing
如果已经设置了别名,我怎样才能检查我的bashrc.
当我提供一个bashrc文件,它有一个函数名称,说好玩,而我当前的环境也有一个别名也很有趣.
我尝试了unalias的乐趣,但这会给我一个错误,当我的环境没有别名时,找不到有趣的错误.
所以在我的bashrc中,在我的趣味函数中,我想检查是否设置了别名,然后是unalias.
mit*_*ull 32
如果您只是想确保别名不存在,只需将其unalias并将其错误重定向到/ dev/null,如下所示:
unalias foo 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
您可以检查是否使用以下内容设置了别名:
alias foo 2>/dev/null >/dev/null && echo "foo is set as an alias"
Run Code Online (Sandbox Code Playgroud)
如联机帮助页中所述:
For each name in the argument list for which no value is sup-
plied, the name and value of the alias is printed. Alias
returns true unless a name is given for which no alias has been
defined.
Run Code Online (Sandbox Code Playgroud)
只需使用命令alias
状
alias | grep my_previous_alias
Run Code Online (Sandbox Code Playgroud)
请注意,您可以实际使用unalias
,因此您可以执行类似的操作
[ `alias | grep my_previous_alias | wc -l` != 0 ] && unalias my_previous_alias
Run Code Online (Sandbox Code Playgroud)
如果设置了别名,则会删除别名.
您可以使用type
查看命令是否存在,或者是否是别名。
如果未找到该命令,它将返回错误状态。
例如,我正在定义以下别名:
$ alias foo="printf"
Run Code Online (Sandbox Code Playgroud)
然后检查以下场景:
$ type foo >/dev/null && echo Command found. || echo Command not found.
Command found.
Run Code Online (Sandbox Code Playgroud)
或专门用于别名:
$ alias foo && echo Alias exists || echo Alias does not exist.
Run Code Online (Sandbox Code Playgroud)
或检查它是别名还是常规命令:
$ grep alias <(type foo) && echo It is alias. || echo It is not.
Run Code Online (Sandbox Code Playgroud)
要检查别名是否在rc文件中定义,需要手动检查,例如:
[ "$(grep '^alias foo=' ~/.bash* ~/.profile /etc/bash* /etc/profile)" ] && echo Exists. || echo Not there.
Run Code Online (Sandbox Code Playgroud)
小智 6
# Test if alias of name exists, and then remove it:
[ "$(type -t name)" = "alias" ] && unalias name
# Test if function of name exists, and then remove it:
[ "$(type -t name)" = "function" ] && unset -f name
Run Code Online (Sandbox Code Playgroud)
检查别名的特定于 bash 的良好解决方案是使用BASH_ALIASES
数组,例如:
$ echo ${BASH_ALIASES[ls]}
Run Code Online (Sandbox Code Playgroud)