シェル干渉を避けるためにコマンドを実行する方法

シェル干渉を避けるためにコマンドを実行する方法

場合によっては、シェル組み込み機能とは異なるファイル/パッケージで同じコマンドが提供されることがあります。例:

$ 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シェルの干渉を回避できます。

関連情報