EDIT: Вы работаете на 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
?
EDIT 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'
EDIT 3
Пожалуйста, обратите внимание, что время ожидания может должны быть значительными если ваш ввод поступает от sort
, ssh
и т. д. (все эти программы могут порождать и устанавливать канал со своим скриптом секунд или минут, прежде чем создавать какие-либо данные над ним.) Кроме того, использование мощного таймаута может резко оштрафовать ваш скрипт, когда ничего не происходит вход для начала (например, терминал.)
Если потенциально большие таймауты являются проблемой, и если вы можете влиять на способ вызова вашего сценария, то вы можете заставить вызывающих явно указывать вашей программе, следует ли использовать stdin через пользовательский вариант или в стандарте GNU
или tar
(например, скрипт [опции [-]] FILE ..., где FILE может быть именем файла, -
для обозначения стандартного ввода или их комбинации, и ваш скрипт будет только прочитайте со стандартного ввода, если -
были переданы как параметр.)
как насчет проверки длины аргументов? ($ #), если есть $ 1, то вы завершаете чтение. если нет, читайте из stdin, я бы сказал. –
Если бы я только мог! использование: ./script.ksh <-d dest> [-f from_sys] [файл, файл1, ..]. Если stdin => [file, file1, ..] не обрабатывается, просто перемещается. Если нет файла stdin => process, переместите файл1, .. Если нет ошибки stdin, а также [file, file1, ..] =>: пользователь должен предоставить некоторые для обработки! – 2009-03-11 16:58:19
ExpertNoob, вы можете пометить этот вопрос как ответ. :) – vladr