У меня есть базовый скрипт, который выводит различные сообщения о состоянии.например,
~$ ./myscript.sh
0 of 100
1 of 100
2 of 100
...
Я хотел обернуть это в родительский сценарий, чтобы запустить последовательность дочерних сценариев и отправить электронное письмо после полного завершения, например, topscript.sh
#!/bin/bash
START=$(date +%s)
/usr/local/bin/myscript.sh
/usr/local/bin/otherscript.sh
/usr/local/bin/anotherscript.sh
RET=$?
END=$(date +%s)
echo -e "Subject:Task Complete\nBegan on $START and finished at $END and exited with status $RET.\n" | sendmail -v group@mydomain.com
Я запускаю это как:
~$ topscript.sh >/var/log/topscript.log 2>&1
Однако, когда я запускаю tail -f /var/log/topscript.log
, чтобы просмотреть журнал, я ничего не вижу, хотя запуск top показывает, что myscript.sh выполняется в настоящее время, и, следовательно, предположительновывод сообщений о состоянии.
Почему stdout / stderr из дочерних сценариев не записывается в журнал родителей?Как это исправить?
РЕДАКТИРОВАТЬ: Я также запускаю их на удаленной машине, подключенной через ssh с использованием псевдо-tty распределения, например, ssh -t user@host
.Может ли псевдо-tty вмешиваться?