有时,shell 内置命令以及其他文件/包会提供相同的命令。例子:
$ type -a printf kill
printf is a shell builtin
printf is /usr/bin/printf
kill is a shell builtin
kill is /bin/kill
在执行命令时,我有时会遇到一些困难或命令无法按预期工作。
示例来自man kill
:
-L, --table
List signal names in a nice table.
如果我从终端尝试,它不起作用:
$ kill -L
bash: kill: L: invalid signal specification
这是因为kill
它是作为 shell 内置执行的,并且没有这样的功能/选项。
所以,如何正确执行命令以避免shell的干扰?
注:这里kill
仅用于举例。您可能会遇到受 shell 干扰的其他命令的困难
答案1
您可以使用env your-command
以避免外壳的干扰。
例子:
$ env kill -L
1 HUP 2 INT 3 QUIT 4 ILL 5 TRAP 6 ABRT 7 BUS
8 FPE 9 KILL 10 USR1 11 SEGV 12 USR2 13 PIPE 14 ALRM
15 TERM 16 STKFLT 17 CHLD 18 CONT 19 STOP 20 TSTP 21 TTIN
22 TTOU 23 URG 24 XCPU 25 XFSZ 26 VTALRM 27 PROF 28 WINCH
29 POLL 30 PWR 31 SYS
另一种方法是使用命令路径如下:
$ which kill
/bin/kill
$ /bin/kill -L
1 HUP 2 INT 3 QUIT 4 ILL 5 TRAP 6 ABRT 7 BUS
8 FPE 9 KILL 10 USR1 11 SEGV 12 USR2 13 PIPE 14 ALRM
15 TERM 16 STKFLT 17 CHLD 18 CONT 19 STOP 20 TSTP 21 TTIN
22 TTOU 23 URG 24 XCPU 25 XFSZ 26 VTALRM 27 PROF 28 WINCH
29 POLL 30 PWR 31 SYS
所以,通过使用env
或指定命令的路径/位置,您可以避免来自 shell 的干扰。