2016-03-31 13 views
-1

PATHからの実行可能なelfs、スクリプト、シンボリックリンクを処理しますが、どのようなアルゴリズムですか? 私は恐れている シェルのこの部分のソースコードが見つかりません。bashや他のスマートシェルが実行可能ファイルを見つける方法は?

UDP:ああ、私はばかです。これは、ディレクトリまたは通常のファイルのPATH内の各実行可能ファイルを探します。

+1

あなたが何を求めているのかよく分かりません。 "my_command"と入力します。シェルは、PATH内の各ディレクトリを "my_command"として、ディレクトリがPATHにリストされている順に探します。それはあなたが求めていることですか? – kaylum

+0

@kaylum彼は、この部分が扱われるBashセクションのソースコードを望んでいると思います。 –

+0

@SuvPおそらく。しかしタイトルは一般的なシェルの質問です。質問体は、その質問の答えを理解するためのコードを要求するようです。しかし、一般的な質問では、ソースコードを回答する必要はありません。したがって、OPが一般的な回答または特定のソースコードを知りたいのかどうかは明確ではありません。 OPからの説明を待つつもりです。 – kaylum

答えて

4

実際には、find_user_command_in_path()で行われます。findcmd.c:553です。

コマンド${foo}を検索するためのアルゴリズムは、基本的には、次のとおりです。絶対

  • チェック${foo}場合:for p in ${PATH}
      :それはこのパスを返すと、PATH内のすべての要素の上に
    • 反復を検索を停止している場合
    • パスを作成して、${p}/${foo}が存在するかどうかを確認してください。
      • それが存在し、実行リターンでこのパスをして
0

私はこの分野の専門家ではありませんが、Linuxではファイルパーミッションの実行可能ビットがすべて重要です。洗練されたアルゴリズムは必要ありません。

+0

シェルは許可をチェックする前にファイルを見つけなければなりません。疑問は、シェルがどのようにファイルを見つけるかです。 –

+0

私は、おそらくそうです。しかし、mararは 'PATH'で指定されたディレクトリをシェルが調べていることを理解しているようですので、実行可能なファイルを特定することが問題であると結論づけました。 – mkluwe

+0

質問*どのようにbashと他のスマートシェルが実行可能ファイル*を見つけることができるか、@mararはPATHが使用されていることを理解していますが、実際にどのように*検索​​されているのかはわかりません。その*検索アルゴリズム*は質問が尋ねるものです。 –

0

のは、我々が現在のディレクトリにハローと呼ばれるファイルを持っているとしましょう、とファイルがちょうど1行が含まれている検索を停止した場合:エコーを "ファイルにはchmod 755を実行して、あなたはその後、ファイルを実行するとhello」を

  1. 、その後、bashシェルで始まる、あなたが言うの.bashrcのPATH変数にリストされているすべての経路を通って見ていきます最初のパスを含む最初のパスが見つかるまであなたのhello実行可能ファイルPATHをリンクリストと考え、bashシェルをリンクされたパスリスト(path by path)を経由するものと考えてください。 bashシェルが実行したいhello実行可能ファイルを実行していない場合は、1つのオプションがあります。hello実行ファイルを前のいずれかのパスに入れます。

  2. 私は怠惰です。私はつまり、私は、chmodコマンドを実行していないと私はちょうどbashシェルがでハローファイルを検索しようとしている

    bashのハロー

を実行する実行可能ファイルにハローをオンにする気にしないでくださいフォークされたbashプロセスが終了する前に、forkされたbashプロセスはhelloファイルを実行します。

私は例としてbashシェルを使用していますが、他のシェルも同じように動作します。