私は対話型シェルとしてBashを使用していますが、両方が同じ名前を共有している場合、Bashにシェル組み込みコマンドの代わりにシステムコマンドを実行させる簡単な方法があるかどうか疑問に思っていました。
たとえば、次のシステムを使用してkill
(からutil-linux
)シグナルを送信する代わりに、指定されたプロセスのプロセスID(pid)を出力します。
$ /bin/kill -p httpd
2617
...
システムコマンドのフルパスを指定しないと、システムコマンドの代わりにBashビルトインが使用されます。kill
組み込みは持っていない-p
コマンドが失敗したように、オプションを:
$ kill -p httpd
bash: kill: p: invalid signal specification
Make bashがシェル組み込みではなく外部の `time`コマンドを使用するようにリストされている回答を試しましたtime
が、実際にはシェルキーワードであり、シェル組み込みではないため、ほとんどが機能します。
で一時的にBashビルトインを無効にする以外にenable -n kill
、これまでに見た中で最良の解決策は以下を使用することです:
$(which kill) -p httpd
シェルビルトインの代わりに外部コマンドを実行する他の簡単な(タイピングが少ない)方法はありますか?
これkill
は単なる例であり、組み込みコマンドをプレフィックスとして使用すると、外部コマンドと同じ名前の関数が実行されないようにする一般的なソリューションcommand
が必要です。ほとんどの場合、新しいプロセスをフォークする必要がないため、組み込みバージョンを使用することを好みます。また、組み込みコマンドには外部コマンドにはない機能がある場合があります。
which kill
バッククォートで囲む(コメントに入れることはできません)は、少し短くなります。