「shコマンド」と実行ファイルとして実行することの違いは何ですか?

「shコマンド」と実行ファイルとして実行することの違いは何ですか?

@Artem S. Tashkinovが提案したスクリプトを使用しました。私はこれを自分で書いたが、コンソールで実行されます。

関連投稿についてはこちらをご覧ください

$sh raw_io.sh: 
20: shopt: not found 
raw_io.sh: 
48: declare: not found 
raw_io.sh: 
61: Syntax error: redirection unexpected

私はそれを実行可能にし、ダブルクリックして「ターミナルで実行」する必要があることがわかりました。

更新中なので、出力をコピー/貼り付けできません。だからスクリーンショットを作りました: 端末で出力を実行する

ダブルクリックで実行されますが、「ターミナルで実行」を押す必要がありますが、端末で直接実行する方法も知りたいです。

~/Desktop$ raw_io
raw_iso: command not found

それでは、これらの起動方法の違いは何ですか?

答え1

というスクリプトを実行するにはmyscript

sh myscript        # Or sh /path/to/myscript
bash myscript      # Or bash /path/to/myscript
perl myscript      # Or perl /path/to/myscript
python myscript    # Or python /path/to/myscript

など。

これは非常に簡単ですが、スクリプトを実行するためにどのインタプリタを使用するべきかを知る必要があり、間違ったインタプリタを使用しようとするとエラーが発生することを確認しました(代わりに使用するなどshbash

より良い方法は、スクリプトが正しいインタプリタ自体を宣言するようにすることです。これは#!、最初の行の定義を使用して行われます。たとえば、次の行はbash(特に/bin/bash)インタプリタとして宣言します。

#!/bin/bash

この機能を使用するには、スクリプトを実行可能にする必要があります。

chmod a+x myscript

その後、指定されたコロンで区切られたディレクトリのリストの1つにある限り、他のプログラムと同じように$PATH実行できます。その名前だけを使用してください。

myscript

ただし、現在のディレクトリ(とマークされている.)はそのディレクトリにないため、$PATH現在のディレクトリでスクリプトを処理する場合は、そのスクリプトを見つけるためのパスを指定する必要があります。これが.示すもの現在のディレクトリ現在の作業ディレクトリ(つまり同じ場所)への相対パス。

./myscript    # Or /full/path/to/myscript

.一般的ににないのにはそのような理由がありますが、必ず追加する必要がある場合は、最初ではなく最後$PATHに入れてください。$PATH(望むよりUNIX履歴には$ PATHの現在のディレクトリは含まれていません。そしてなぜそうです。デフォルトではパスにありませんか?.)

スクリプト名や拡張子は重要ではありません(使用するコマンド名testがにリストされているシステムディレクトリにすでに存在しない限り$PATH)。myscriptここではこれを例として使います。必要に応じて使用してもよいし、使用してもよいmyscript.shが、confusion.pngそうではないのでls.exe必ず必要だとは思わないmyscript.sh。ただし、一部のGUIでは、ファイル拡張子を使用してファイルの内容を推測することができ、png非標準的な方法(スクリプトなど)で拡張子を使用すると混乱を招く可能性があります。 GUIがファイルの内容を識別する正しい方法は、次のコマンドと同等のものを使用することですが、fileすべての方法がこのコマンドを実行するわけではありません。

file myscript

最後に、スクリプト操作を終えて再利用しようとしました$PATH。私の場合は使用しましたが。lscp$HOME/bin$PATH

関連情報