シェルスクリプトの実行について

シェルスクリプトの実行について

シェルスクリプトファイルがあるとしましょうfoo.sh

chmod + x foo.sh 実行ファイルに変更できます。

Kernighan-Pike:Unixプログラミング環境(UP)は、foo入力後にスクリプトを実行する必要があることを示します。代わりに私のUbuntuシステムでは、sh fooまたは./foo。私はこれが(UPが書かれたときに)存在しなかったシェルのいくつかの機能のためだと思います。この違いが存在する理由と、それがなぜ重要なのか、誰かが私に教えてくれたら幸いです。

答え1

  1. 実行ファイルの名前が重要です。ファイル名がある場合、foo.sh他の名前のfoo実行可能ファイルがない場合、実行は機能しませんfoo。 Windowsとは異なり、Unixはこれを行いません。絶対的なファイル拡張子。

  2. 以下が機能する場合:

    ./foo.sh
    

    しかし、そうではありません:

    foo.sh
    

    これは、ファイルが現在のディレクトリにあり、現在のディレクトリがPATHにないことを意味します。保護のためにコマンドへのパスを明示的に指定しないと、シェルはPATH内のファイルでのみコマンドを検索します。

  3. スペースが重要です。以下が機能する可能性があります。

    ./foo.sh
    

    しかし、これは(この質問の最初のバージョンから得られた)確かに動作しません。

    ./ foo.sh
    

    ./との間にスペースがある場合、シェルは現在のディレクトリを引数として使用して実行しよfoo.shうとしていると思います。foo.shエラーメッセージが生成されます。

関連情報