Myscript.sh
入力として 1 つの引数を必要とするという bash シェル スクリプトがあるとします。
text.txt
しかし、その引数として呼び出されるテキスト ファイルの内容が必要です。
これを試してみましたが、うまくいきませんでした:
cat text.txt | ./Myscript.sh
これを実行する方法はありますか?
答え1
./Myscript.sh "$(cat text.txt)"
答え2
パイプ出力をシェル スクリプトの引数として使用できます。
次の方法を試してください:
cat text.txt | xargs -I {} ./Myscript.sh {}
答え3
私の意見では、この質問に正しく答えているのは @bac0n だけだと思いますが、その答えを完成させるために、パイプされた引数をスクリプト引数リストの先頭に追加する短いライナーを次に示します。
#!/bin/bash
declare -a A=("$@")
[[ -p /dev/stdin ]] && { \
mapfile -t -O ${#A[@]} A; set -- "${A[@]}"; \
}
echo "$@"
使用例:
$ ./script.sh arg1 arg2 arg3
> arg1 arg2 arg3
$ echo "piped1 piped2 piped3" | ./script.sh
> piped1 piped2 piped3
$ echo "piped1 piped2 piped3" | ./script.sh arg1 arg2 arg3
> piped1 piped2 piped3 arg1 arg2 arg3