J. *_*ker 8 shell dash shell-script stdin
我知道以前对此的报道很少,但这些答案要么缺乏解释,要么不适用。
基本上在某些时候,我的脚本需要检查是否指定了文件,如果是,则稍后将用作输入。
[ -f "$1" ] && TINPUT="$1"
Run Code Online (Sandbox Code Playgroud)
足够简单......现在如果找不到文件或未指定文件,我TINPUT="-"会告诉后面的命令读取标准输入。
这是我的问题......如果脚本在没有管道或没有指定文件的情况下运行,我如何让脚本因错误而死?
我正在使用 dash,Debian POSIX 兼容 shell,所以我不能使用 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
Run Code Online (Sandbox Code Playgroud)