7

У меня есть доступ к нескольким удаленным учетным записям, которые я монтирую через sshfs в подкаталогах $ HOME/SSHFS. Чтобы напомнить, что я не работаю с локальными файлами, я установил $PROMPT_COMMAND в функцию prmt_cmd , где я установил другой $PS1 если $PWD соответствует $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.

2 ответа2

12

Просто перенаправьте вывод.

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

В bash вы можете сделать следующее, чтобы unalias псевдоним, только если он существует, например, rm:

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

Другой идеей было бы перезаписать псевдоним, даже если он существует:

alias rm='/bin/rm'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .