場合によっては、シェル組み込み機能とは異なるファイル/パッケージで同じコマンドが提供されることがあります。例:
$ 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
これはシェル組み込みで実行され、そのような機能/オプションがないためです。
だから、シェルの干渉を避けるためにコマンドを正しく実行するには?
注:これはkill
単なる例です。シェルの妨げになる他のコマンドを実行するのが難しい場合があります。
答え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
シェルの干渉を回避できます。