シェルスクリプトの実行のさまざまな形式

シェルスクリプトの実行のさまざまな形式

同様の質問をしたことがありますが、別の質問をします。

私はこれを読んでいますhttp://www.tldp.org/LDP/abs/html/invoking.html私は次の内容を読んで混乱しました。

「推奨しない

sh スクリプト名

これは、スクリプト内の標準入力読み取りを効果的に無効にするためです。 」

ここには2つあります。まず、次のスクリプトを実行しようとします。

sh myscript.sh <ファイル.txt

標準入力でよく読み取られます。

2つ目は、スクリプトの上部にshebangを追加する方法を知っていることです。

#!/bin/bash

全く同じ意味

バッシュ myscript.sh

だから、著者がそこで何を指摘しているのか理解していません。ただ混乱しています。

作者が何を意味するのか理解している人はいますか?

よろしくお願いします。

答え1

引用に誤字があります。標準入力を tosh <scriptnameの代わりに送信する「deprecated」で始める必要があります。shscriptname

答え2

スクリプトの上部にある項目は、#!/bin/bash名前を直接入力して実行する場合にのみ機能します。

$ ./scriptname

この方法を使用するには、ファイルの実行権限も設定する必要があります。実際にファイルを実行すると、次のことができます。

  • (バイナリ)で書かれています。機械語コード
  • #!インタプリタはルール(shebangと呼ばれる)に従ってファイルに割り当てられます。
#!/path/to_the/interpreter

私が間違えない限り、そのような行を含めることができないテキストファイル(作成された言語の構文のため)はこの方法で実行できません。
これらのファイルの唯一の他の方法は、ファイル名をインタプリタに引数として渡すことです。 2番目のアプローチの最大の利点は、ファイルがユーザーにとって実行可能ではなく読み取りのみ可能でなければならないことです。

最初の質問の場合、l0b0は正しいです。間違って読みました。

関連情報