シェルスクリプトファイルがあるとしましょうfoo.sh
。
chmod + x foo.sh
実行ファイルに変更できます。
Kernighan-Pike:Unixプログラミング環境(UP)は、foo
入力後にスクリプトを実行する必要があることを示します。代わりに私のUbuntuシステムでは、sh foo
または./foo
。私はこれが(UPが書かれたときに)存在しなかったシェルのいくつかの機能のためだと思います。この違いが存在する理由と、それがなぜ重要なのか、誰かが私に教えてくれたら幸いです。
答え1
実行ファイルの名前が重要です。ファイル名がある場合、
foo.sh
他の名前のfoo
実行可能ファイルがない場合、実行は機能しませんfoo
。 Windowsとは異なり、Unixはこれを行いません。絶対的なファイル拡張子。以下が機能する場合:
./foo.sh
しかし、そうではありません:
foo.sh
これは、ファイルが現在のディレクトリにあり、現在のディレクトリがPATHにないことを意味します。保護のためにコマンドへのパスを明示的に指定しないと、シェルはPATH内のファイルでのみコマンドを検索します。
スペースが重要です。以下が機能する可能性があります。
./foo.sh
しかし、これは(この質問の最初のバージョンから得られた)確かに動作しません。
./ foo.sh
./
との間にスペースがある場合、シェルは現在のディレクトリを引数として使用して実行しよfoo.sh
うとしていると思います。foo.sh
エラーメッセージが生成されます。