Невозможно отменить rm и сделать его функцией в Zsh
-
03-07-2019 - |
Вопрос
Я безуспешно запускаю свой файл .zshrc
unalias rm
rm() { mv $* /tmp/wastebasket }
Я добираюсь до стартапа
/Users/Masi/.zshrc:unalias:34: no such hash table element: rm
Я заметил, что проблема с хэш-таблицей была неразрешенной ошибкой в Убунту для запуска-справка.Я не уверен, относится ли эта ошибка к Mac и к rm
-командовать тоже.
Как вы можете отключить уведомление при запуске?
Решение
Все остальные правы в том, что у вас просто не было псевдонима.Что еще более важно:
НЕ НАДО сделай это.Когда-нибудь вы окажетесь на другой машине POSIX, которая соответствует стандартам POSIX (удаление без "переработки"), и вы случайно удалите что-то и у вас не будет возможности отменить это.Изучайте твердую дисциплину прямо сейчас.
Другие советы
Это сообщение об ошибке вызвано тем, что вы пытаетесь отменить rm
и такого псевдонима не существует.
Поскольку вы можете использовать псевдонимы более одного раза без ошибок, я бы изменил ваш код на:
alias rm=x
unalias rm
rm() { mv $* /tmp/wastebasket }
Это гарантирует, что rm
существует как псевдоним до того, как вы попытаетесь его отменить.
Я не очень знаком с zsh, но, возможно, это потому, что rm - это не псевдоним, а фактически стандартная утилита, находящаяся в /bin .
Вы могли бы просто присвоить ему псевдоним, не пытаясь сначала отменить его, переопределив любой предыдущий псевдоним.
Вам следует попытаться удалить только существующий псевдоним.Создание псевдонима, который сразу не является псевдонимным, кажется мне уродливым.Моя рекомендация состоит в том, чтобы проверить, является ли rm псевдонимом и не является ли он сглаживающим, если это так.
case $(type rm) in
(*alias*) unalias rm;;
esac
Или используйте грубую силу и игнорируйте stderr с помощью
unalias rm 2>/dev/null