编辑:您在 HP-UX 上运行
在 HP-UX 上测试[ -t 0 ]
,它似乎对我有用。我使用了以下设置:
/tmp/x.ksh:
#!/bin/ksh
/tmp/y.ksh
/tmp/y.ksh:
#!/bin/ksh
test -t 0 && echo "terminal!"
运行/tmp/x.ksh
打印:terminal!
您能否在您的平台上确认上述内容,和/或提供更接近您的情况的替代测试设置?您的脚本最终是由 生成的cron
吗?
编辑 2
如果绝望,并且如果 Perl 可用,请定义:
stdin_ready() {
TIMEOUT=$1; shift
perl -e '
my $rin = "";
vec($rin,fileno(STDIN),1) = 1;
select($rout=$rin, undef, undef, '$TIMEOUT') < 1 && exit 1;
'
}
stdin_ready 1 || 'stdin not ready in 1 second, assuming terminal'
编辑 3
sort
请注意,如果您的输入来自等,则超时可能需要很大ssh
(所有这些程序都可以在生成任何数据之前几秒或几分钟使用您的脚本生成并建立管道。)此外,使用大量超时可能会显着当输入中没有任何内容(例如终端)时,惩罚您的脚本。
如果潜在的大超时是一个问题,并且如果您可以影响调用脚本的方式,那么您可能希望强制调用者明确指示您的程序是否应该使用标准输入,通过自定义选项或在标准GNU
或tar
方式(例如 script [options [--]] FILE ...,其中 FILE 可以是文件名、-
表示标准输入的 a 或它们的组合,如果-
作为范围。)