./scriptとbashスクリプトの間に違いはありますか? [コピー]

./scriptとbashスクリプトの間に違いはありますか? [コピー]

次に始まるシェルスクリプトファイルが与えられた場合

#!/bin/bash

# (bash script here),

修正しましたがchmod +x、実行とコマンドラインの間に違いがありますか?./scriptbash script

答え1

それはあなた次第です$PATH./script実行できます/bin/bash script。パスに最初に現れるものは何でも使用されますbash scriptが、必ずしもそうではなく、他のバージョンのBashでもあります。bash/bin/bash

答え2

2つの違いがあります。

  • ./tryit.shbashがなければ実行されませんが/binbash tryit.shbashがあれば実行されません。なぜなら、bangパス()のシェルが使用されるから PATHです。./tryit.sh/bin/bashbash tryit.shbashPATH
  • ./tryit.sh実行ビットが設定されていない場合は実行されませんが、bash tryit.shスクリプトは実行されます。ビットがセットされることを指定して、このような状況を排除しました。一部の編集者はこのビットをクリアして作業コマンドが失敗する可能性があります。

このコマンドはbash tryit.shbashを呼び出して、実行するコマンドがファイルに見つかったことを示しますtryit.sh。多くのプログラム(例えば、awk、perl、python、bash、sh、ksh)がこのように動作します。これは、コマンドファイルを処理するUnixプログラムの標準idomです。

答え3

少しずつ違うのでミスしやすいです。

使用すべきこと(両方の形式で作成します)

./script
bash ./script

私の推論は、ディレクトリを変更する場合はこれが明らかであるということです。

明示的でない形式

script
bash script

それほど安全ではありません。bash script現在のディレクトリを検索し、PATH環境変数のディレクトリを検索し、scriptPATHディレクトリからのみ検索します。予想とは異なるコマンドを実行すると、ファイルが破損する可能性があります。

答え4

私の記憶が正しいなら、次の2つははいまったく同じです:

$ ./script

そして

$ source script

したがって、./「コマンド」を使用すると、実際にsourceフードの下で呼び出された、それ自体がbash組み込まれたコマンドです。あるいは他の解釈では、お互いを別名で呼ぶこともできます。 しかし、:最初の呼び出しでは、ユーザー(ユーザー)が所有者またはグループの+x(=実行可能)フラグを設定する必要がありますchmod。それ以外の場合は「許可拒否」エラーが発生しますが、sourceそのコマンドで実行することもできます。いいえバナー+x。したがって、たとえばbashNTFS形式のペンドライブでスクリプトを実行したい場合、後者は時々救世主になります。なぜなら、NTFS形式のペンドライブchmodでは動作しないからです。

考えるこれはまた、どのような方法であなたの質問に答えます。

したがってbash script、呼び出し手順はsource scriptまったく同じにすることはできません。bashそれ自体他のスクリプトがそのうちbashの1つを呼び出している間は、スクリプトを引数として指定してください。組み込みコマンドスクリプトをパラメータとして渡します。結果は(少なくとも日常的な使用では)同じである可能性が高いですが、両方の場合で結果を取得する方法は多少異なります。

関連情報