多くの組み込みbashコマンドと同様に、引数と入力を処理できるbashスクリプトを作成したいと思います。たとえば、並べ替えのように、処理できます
sort -k 1 -r input.txt
sort input.txt -k 1 -r
cat input.txt | sort -k 1 -r
sort -k 1 -r < input.txt
sort -k 1 -r <(cat input.txt)
スクリプトで引数と入力を同様の方法で処理できるようにしたい
myscript.sh -i 3 -b 4 input.txt
myscript.sh input.txt -i 3 -b 4
cat input.txt | myscript.sh -i 3 -b 4
myscript.sh -i 3 -b 4 < input.txt
myscript.sh -i 3 -b 4 <(cat input.txt)
これまでのところ、「read」と「getopts」の一部の機能のみを使用しており、自分でそれを実行しようとするとバグが発生する可能性があると考えています。
私の質問をより明確に述べるために、input.textの内容を
aaa
bbb
ccc
引数iとbの値を使用して何かを実行したいのですが、この例ではそれを出力します。私が欲しいサンプル出力は
i : 3
b : 4
aaa
bbb
ccc
この出力を提供するために上記のサンプルコマンドを処理するコードを書くための最良の方法は何ですか?
以下は、これまでで最高の@chepnerのサンドイッチのアイデアから得られたコードです。
#!/bin/bash -l
die () {
echo >&2 "[exception] $@"
exit 1
}
#parse param
while getopts "i:b:" OPTION; do
case "$OPTION" in
i)
i="$OPTARG"
;;
b)
b="$OPTARG"
;;
*)
die "unrecognized option"
;;
esac
done
if [ -e tmpfile ]
then
rm tmpfile
fi
shift $(($OPTIND - 1))
echo "i : "$i
echo "b : "$b
cat $1 > tmpfile
if read -t 0; then
cat >> tmpfile
fi
cat tmpfile