Bashでコマンドを実行する方法

Bashでコマンドを実行する方法

これは私がいつも疑問に思った一般的な質問ですが、簡単に説明すると、bashはスクリプトまたはターミナルを介して与えられたコマンドをどのように実行しますか?

私は次のようにすべてのコマンドを調べるために複数のifステートメントを持つことができると思いました(疑似コード)。

if (command == "pwd") pwd();
else if (command == "echo") echo();
...

ただし、Firefoxやgeditなどのプログラムに対して実行されるコマンドなど、新しいコマンドが追加されるたびにコードを再コンパイルする必要があるため、問題が発生します。

その後、このコマンドが思い出されました。このwhichコマンドは(あまり意図せずに)与えられたコマンドのディレクトリを指し、これはbashがファイルを見つけ、iostreamを使ってファイルを実行すると仮定します。

そうですか?では、どのメソッドを呼び出すのか、どうすればわかりますか?それとも単なる一般的な実行可能ファイルですか?

ベストアンサー1

コマンドが存在する場合、内部で動作する方法は次のとおりです。通常の一般的な標準入力を使用してコマンド(スクリプトから来たかどうかにかかわらず)とその引数を保存し、解析して次のようにシステムコールに送信execveします。その後、システムでコマンドを実行します。

http://man7.org/linux/man-pages/man2/execve.2.html

また、Time4Teaが述べたように、実行中のシェルに固有の組み込みコマンドがいくつかあります。exitその一つです。

 

経験上、既存の方法でLinuxについて理解できない場合は、ソースコードを見つけてください。

おすすめ記事