由于某些原因,我希望我的程序使用外部函数而不是内置的shell函数(例如echo)。程序调用system(),使用/bin/sh执行参数。使用bash shell时,我已经知道enable -n <fnc>可以阻止shell使用内置函数,但是,我找不到sh shell的类似方法。对于sh是否可以这样做?
echo
system()
/bin/sh
bash
enable -n <fnc>
sh
ne5o7dgx1#
要强制任何shell使用外部可执行文件而不是内置命令,只需通过path指定即可:
# Use whatever the shell defaults to echo "Hello World" # Always use the specified external binary /bin/echo "Hello World"
POSIX 2.9.1中指定了此行为:如果命令名包含至少一个斜杠,则 shell 应在单独的实用程序环境中执行该实用程序,其操作等同于调用execl()函数
pwuypxnk2#
在related question中得到了回答:在命令前面加上env。
env
$ env echo "Hello"
env是一个独立的程序,它不能访问shell内置程序,例如echo,因此它将在命令路径中搜索echo。
2条答案
按热度按时间ne5o7dgx1#
要强制任何shell使用外部可执行文件而不是内置命令,只需通过path指定即可:
POSIX 2.9.1中指定了此行为:
如果命令名包含至少一个斜杠,则 shell 应在单独的实用程序环境中执行该实用程序,其操作等同于调用execl()函数
pwuypxnk2#
在related question中得到了回答:
在命令前面加上
env
。env
是一个独立的程序,它不能访问shell内置程序,例如echo
,因此它将在命令路径中搜索echo
。