我在我的嵌入式系统中使用ash和bash shell,我使用两个shell获得了相同命令的以下错误消息
For ash shell
$ kill -9
sh: you need to specify whom to kill
For bash shell
$ kill -9
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
所以,我的问题是为什么在两个不同的shell中有相同命令的两个不同的错误消息?我的理解是从命令而不是从shell返回错误消息。
答案 0 :(得分:7)
我的问题是为什么有两个不同的错误消息 在两个不同的shell中命令?
因为kill
是shell-builtin(至少在bash
上)。这意味着正在使用bash
,说kill ...
将执行shell内置而不是可能位于/bin
或/usr/bin
的二进制文件。
$ echo $SHELL
/bin/bash
$ type kill
kill is a shell builtin
$ kill
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
$ which kill
/bin/kill
$ /bin/kill
usage: kill [-s signal_name] pid ...
kill -l [exit_status]
kill -signal_name pid ...
kill -signal_number pid ...
您可以通过使用bash
内置来禁用enable
中的shell-builtins:
$ enable -n kill
$ kill
usage: kill [-s signal_name] pid ...
kill -l [exit_status]
kill -signal_name pid ...
kill -signal_number pid ...
(禁用内置函数后调用kill
会调用系统/bin/kill
。)