私はこれが以前に不十分にカバーされたことを知っていますが、それらの答えは説明が不足しているか、当てはまりません。
基本的に、ある時点で、スクリプトでファイルが指定されているかどうかを確認する必要があります。指定されている場合は、後で入力として使用されます。
[ -f "$1" ] && TINPUT="$1"
簡単です...ファイルが見つからないか、指定されていない場合は、TINPUT="-"
これは後のコマンドにstdinを読み取るように指示します。
これが私の質問です...パイプなしで、またはファイルを指定せずにスクリプトを実行した場合、スクリプトをエラーで終了させるにはどうすればよいですか?
Debian POSIX準拠のシェルであるdashを使用しているため、Bashismsを使用できません。また、ifs
よりもリストを使用することを好みますが、ほとんどのifs
はとにかくリストに書き込むことができます。
標準入力が端末であるかどうかをテストできます。
if [ -n "$1" ]; then
exec <"$1"
Elif tty >/dev/null; then
echo 1>&2 'Cowardly refusing to read data from a terminal.'
exit 2
# else we're reading from a file or pipe
fi