我知道这已经是不好之前已介绍过,但这些答案要么缺乏解释,要么不适用。
基本上在某些时候我的脚本需要检查是否指定了文件,如果是,稍后将用作输入。
[ -f "$1" ] && TINPUT="$1"
足够简单...现在,如果未找到或未指定文件,我将TINPUT="-"
告诉后面的命令读取标准输入。
这是我的问题...如果脚本在没有管道或没有指定文件的情况下运行,我如何让脚本因错误而终止?
我使用的是 dash,Debian POSIX 兼容的 shell,所以我不能使用 Bashisms。我也更喜欢使用列表,ifs
但大多数ifs
都可以用列表编写。
答案1
您可以测试标准输入是否是终端:
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