パイピング後に変数の内容を保存する方法

パイピング後に変数の内容を保存する方法

次のスクリプトがあります

#!/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

関連情報