編集:HP-UXで実行しています
[ -t 0 ]
HP-UX でテストしたところ、うまく機能しているようです。次のセットアップを使用しました。
/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、またはそれらの組み合わせにすることができ、スクリプトは標準入力からのみ読み取ります-
。パラメータ)