リダイレクトはソーススクリプトの引数として表示されません。

リダイレクトはソーススクリプトの引数として表示されません。

私の問題は、bashスクリプトを書くときに画面に印刷できないことです。

. myBashScript.sh < text.txt

ただmyBashScript.sh印刷して書く

echo $2

ただし、「text.txt」を印刷する代わりに「newLine」が表示されます。私が知る限り、「<」は新しい行です。

なぜ$2ダメなのtext.txt

答え1

実際に入力しているとします。

./myBashScript.sh < text.txt

スラッシュを使用します。

これを実行すると、./myBashScript.sh < text.txt対話型シェルは実際に< text.txtそれをキャプチャし、特別なコマンドとして解釈します。具体的には、コマンドラインを解釈して、text.txt .shに関連付けられた標準入力を使用してmyBashScriptを実行する必要があることを意味します。これにより、< text.txtコマンドラインからシェルが削除され、コントロールがmyBashScript.shに渡されます。したがって、シェルスクリプトに関する限り、引数はゼロで空です$2。あなたのスクリプトは単に次のように翻訳されます。

echo

改行文字を印刷します。

実際にファイル名を印刷するには、次の点を考慮する必要があります。

#!/bin/sh
echo $1

その後、次を実行できます。

$ ./myShellScript text.txt
text.txt

一方、ファイルの内容を印刷するにはcat(1)を使用する必要があります。シェルスクリプトは次のとおりです。

#!/bin/sh
cat $1

その後、次を実行できます。

$ ./myShellScript text.txt
Hello from text.txt, a file containing a bunch of test strings.

関連情報