当没有东西可取消别名时,静音 bash 的取消别名

当没有东西可取消别名时,静音 bash 的取消别名

我可以访问几个远程帐户,这些帐户通过 sshfs 挂载在 $HOME/SSHFS 的子目录中。为了提醒自己不是在处理本地文件,我设置了$PROMPT_COMMAND一个函数prmt_cmd,其中设置了不同的$PS1if $PWDmatches $HOME/SSHFS*。现在,为了增加一点额外的保护,我想在进入 的子目录时-i自动将标志添加到rmmv和命令中。所以我最终得到了类似的东西cp$HOME/SSHFS

function prmt_cmd () {
if [[ $PWD == $HOME/SSHFS* ]] ; then
    PS1=some prompt
    alias rm='rm -I'
    alias mv='mv -i'
    alias cp='cp -i'
else
    # Reset the PS1, remove aliases
    PS1=my default prompt
    unalias rm mv cp
fi
}

(在实际定义中,我做了一些其他的事情,但这无关紧要。)但是,unalias当别名不存在时会抱怨,这意味着当我不在 SSHFS/* 中时,我会在每个提示前收到三条错误消息。unalias似乎没有开关可以将其静音。所以我的问题是:有没有更好的方法来实现我想要的?也许我只是做错了(完全)。

如果相关的话,$BASH_VERSION = 4.1.5(1)-release在 Ubuntu 10.10 上。

答案1

只需重定向输出。

unalias rm mv cp >/dev/null 2>/dev/null

答案2

在 bash 中你可以执行以下操作匿名仅当别名存在时,例如rm

[ -n "`alias -p | grep '^alias rm='`" ] && unalias rm

另一个想法是覆盖别名,即使它存在:

alias rm='/bin/rm'

答案3

alias name >/dev/null 2>&1 && unalias name

这不会重定向的输出unalias,而是静静地测试别名是否存在,如果发现则将其删除。

这样可以避免中止正在运行的脚本,除非执行时set -e出现问题unalias。它也不会吃掉某些东西的诊断消息unalias出错。

alias -p它也比解析子进程的输出更简单。

相关内容