次のスクリプトがあります
#!/bin/bash
file="$1"
cat $file
n=$(cat $file | wc -l)
cat $file
私が使用する方法は、cat some_file.txt | myScript.sh
最初のcat
ファイルの内容を出力し、2番目は出力しないことです。パイピング後に変数の内容を保存する方法は?
答え1
これはあなたが考える仕事をしていません。これは$1
スクリプトに渡す最初のパラメータですが、実際にはどのパラメータも渡しません。cat $file
実際に孤独になるという意味だcat
。引数が指定されていない場合は、そのcat
入力のみが印刷されます。
$ echo "foo" | cat
foo
したがって、最初はcat
ファイルの内容である入力を印刷します。 2つ目は、最初のものがすべてを取得したため、入力がないため、何もしません。あなたがしたいことはこれです:
myscript.sh file
これにより、ファイルの内容が2回印刷され、出力が変数cat $file |wc
に保存されますn
。
にファイルの内容を保存するには$file
:
file="$(cat < "$1")"
そして、ファイル名を引数として使用してスクリプトを実行します。
script.sh file