我可以访问几个远程帐户,这些帐户通过 sshfs 挂载在 $HOME/SSHFS 的子目录中。为了提醒自己不是在处理本地文件,我设置了$PROMPT_COMMAND
一个函数prmt_cmd
,其中设置了不同的$PS1
if $PWD
matches $HOME/SSHFS*
。现在,为了增加一点额外的保护,我想在进入 的子目录时-i
自动将标志添加到rm
、mv
和命令中。所以我最终得到了类似的东西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
它也比解析子进程的输出更简单。