如何执行命令以避免 shell 的干扰

如何执行命令以避免 shell 的干扰

有时,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 的干扰。

相关内容