PATHからの実行可能なelfs、スクリプト、シンボリックリンクを処理しますが、どのようなアルゴリズムですか?
私は恐れている
シェルのこの部分のソースコードが見つかりません。bashや他のスマートシェルが実行可能ファイルを見つける方法は?
UDP:ああ、私はばかです。これは、ディレクトリまたは通常のファイルのPATH内の各実行可能ファイルを探します。
PATHからの実行可能なelfs、スクリプト、シンボリックリンクを処理しますが、どのようなアルゴリズムですか?
私は恐れている
シェルのこの部分のソースコードが見つかりません。bashや他のスマートシェルが実行可能ファイルを見つける方法は?
UDP:ああ、私はばかです。これは、ディレクトリまたは通常のファイルのPATH内の各実行可能ファイルを探します。
実際には、find_user_command_in_path()
で行われます。findcmd.c:553です。
コマンド${foo}
を検索するためのアルゴリズムは、基本的には、次のとおりです。絶対
${foo}
場合:for p in ${PATH}
${p}/${foo}
が存在するかどうかを確認してください。
私はこの分野の専門家ではありませんが、Linuxではファイルパーミッションの実行可能ビットがすべて重要です。洗練されたアルゴリズムは必要ありません。
シェルは許可をチェックする前にファイルを見つけなければなりません。疑問は、シェルがどのようにファイルを見つけるかです。 –
私は、おそらくそうです。しかし、mararは 'PATH'で指定されたディレクトリをシェルが調べていることを理解しているようですので、実行可能なファイルを特定することが問題であると結論づけました。 – mkluwe
質問*どのようにbashと他のスマートシェルが実行可能ファイル*を見つけることができるか、@mararはPATHが使用されていることを理解していますが、実際にどのように*検索されているのかはわかりません。その*検索アルゴリズム*は質問が尋ねるものです。 –
のは、我々が現在のディレクトリにハローと呼ばれるファイルを持っているとしましょう、とファイルがちょうど1行が含まれている検索を停止した場合:エコーを "ファイルにはchmod 755を実行して、あなたはその後、ファイルを実行するとhello」を
、その後、bashシェルで始まる、あなたが言うの.bashrcのPATH変数にリストされているすべての経路を通って見ていきます最初のパスを含む最初のパスが見つかるまであなたのhello実行可能ファイルPATHをリンクリストと考え、bashシェルをリンクされたパスリスト(path by path)を経由するものと考えてください。 bashシェルが実行したいhello実行可能ファイルを実行していない場合は、1つのオプションがあります。hello実行ファイルを前のいずれかのパスに入れます。
私は怠惰です。私はつまり、私は、chmodコマンドを実行していないと私はちょうどbashシェルがでハローファイルを検索しようとしている
bashのハロー
を実行する実行可能ファイルにハローをオンにする気にしないでくださいフォークされたbashプロセスが終了する前に、forkされたbashプロセスはhelloファイルを実行します。
私は例としてbashシェルを使用していますが、他のシェルも同じように動作します。
あなたが何を求めているのかよく分かりません。 "my_command"と入力します。シェルは、PATH内の各ディレクトリを "my_command"として、ディレクトリがPATHにリストされている順に探します。それはあなたが求めていることですか? – kaylum
@kaylum彼は、この部分が扱われるBashセクションのソースコードを望んでいると思います。 –
@SuvPおそらく。しかしタイトルは一般的なシェルの質問です。質問体は、その質問の答えを理解するためのコードを要求するようです。しかし、一般的な質問では、ソースコードを回答する必要はありません。したがって、OPが一般的な回答または特定のソースコードを知りたいのかどうかは明確ではありません。 OPからの説明を待つつもりです。 – kaylum