私は次のスクリプトを持っています
#!/bin/bash
file="$1"
cat $file
n=$(cat $file | wc -l)
cat $file
cat some_file.txt | myScript.sh
最初のものはファイルの内容を出力し、2 番目のものは出力しないように使用しますcat
。パイプの後の変数の内容を保持するにはどうすればよいでしょうか?
答え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