Я хочу сказать, что я хочу использовать unset
, который не является самой функцией оболочки. Если бы я мог это сделать, я мог бы убедиться, что command
чист, запустив
#!/bin/sh
{ \unset -f unalias command [; \unalias unset command [ } 2>/dev/null;
# make zsh find *builtins* with `command` too:
[ -n "$ZSH_VERSION" ] && options[POSIX_BUILTINS]=on
Если я использую Debian Almquist shell (тире), я думаю, что могу полагаться, что \unset
является чистым. По крайней мере, я не мог определить функцию оболочки с именем unset
в dash
. Если в bash
или в zsh
я мог бы определить unset() { echo fake unset; }
, и после этого я не могу отключить функцию: \unset -f unset
выводит "fake unset".
Относительно этого в bash
script можно экспортировать функцию export -f <function name>
, чтобы ее можно было использовать в сценариях bash
, вызываемых script. Однако то же самое не работает в сценариях dash
. Интересно, если мне приходится беспокоиться о том, что команда определяется как функция оболочки вне файла script, который я пишу, если я использую dash
? Как насчет других совместимых с POSIX оболочек?