これは私がいつも疑問に思った一般的な質問ですが、簡単に説明すると、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について理解できない場合は、ソースコードを見つけてください。