Какую версию zsh Вы используете?
Вы попробовали без какого-либо .zshrc вообще? Поскольку с версией ZSH я имею здесь, это - поведение по умолчанию - без дальнейшей конфигурации.
Вы не можете отключить его, но можете скрыть с помощью функции. Используйте на свой страх и риск.
shell_builtin() {
: ## Do nothing.
}
Чтобы снова включить его, просто отключите его:
unset shell_builtin
Вы можете:
alias time='"time" '
(конечный пробел предназначен для расширения псевдонима после него, в качестве бонуса).
Заключение в кавычки ключевого слова (ключевые слова являются частью синтаксиса языка оболочки) предотвращает его интерпретацию как ключевое слово, поэтому здесь по нему выполняется обычный поиск команд.
Он работает в bash
, zsh
, mksh
, но не в ksh93
, ash
или ] Яш
.
Обратите внимание, что для неинтерактивных экземпляров bash
(например, в скриптах) вам потребуется shopt -s expand_aliases
, в отличие от других командных интерпретаторов, bash
не По умолчанию псевдонимы не раскрываются, если они не интерактивны.
Как вы узнали, вы не можете отключить ключевое слово с помощью enable -n
.
Однако вы можете сделать ключевое слово встроенным с помощью enable -f
, а затем отключить его:
bash
./ configure && make
examples / loadables
вы найдете несколько примеров загружаемых встроенных команд, отредактируйте одну из них, например, sync
, чтобы заменить все экземпляры синхронизировать
с временем
. make
в examples / loadables
. bash
запустите enable -f ./sync time
. enable -n time
теперь работает. И help
показывает: * time
(в дополнение к time [-p] pipeline
) (не то чтобы это когда-либо было кому-либо полезно) .
Вместо того, чтобы отключать ключевое слово, если вы можете вызвать его без того, чтобы синтаксический анализатор оболочки нашел его в позиции команды - или в первом слове простой команды - вы сможете запустить его без проблем. Указанная в POSIX команда команда
предназначена именно для этого. Так, например, вы можете вызвать команду time
, например:
command time
Насколько я могу судить, это работает в любой оболочке. Однако странно, что многие, кажется, относятся к этому иначе. Вот демонстрация:
echo 'echo "$0"' >./time
chmod +x ./time
for sh in dash ksh zsh bash yash 'busybox ash' posh mksh
do command -p $sh -c '
PATH=.:$PATH
printf "\n%s\n" "$0"
time
command time' "$sh"
done
dash
./time
./time
ksh
user 0m0.00s
sys 0m0.00s
time
zsh
shell 0.00s user 0.00s system 71% cpu 0.005 total
children 0.00s user 0.00s system 0% cpu 0.005 total
time
bash
real 0m0.000s
user 0m0.000s
sys 0m0.000s
./time
yash
./time
./time
busybox ash
./time
./time
posh
./time
./time
mksh
0m0.00s user 0m0.00s system
./time