Я прочитал этот вопрос и ответ - Перенаправить stderr в stdout, но ничего, кажется, не работает, чтобы перехватить ошибку программного обеспечения под названием OpenMPI на Ubuntu 16.04 LTS.
У меня есть команды OpenMPI в сценарии оболочки, набирая
mpirun -np 4 command
и затем в командной строке я набираю
job_script >& logs
Это захватывает ошибки прикладного программного обеспечения и вывод, но не захватывает ошибки OpenMPI, которые бросает сценарий. Как мне перехватить ошибки OpenMPI, так как сейчас они уходят в стандартную ошибку?
Оператор >&
перенаправляет стандартный вывод ошибок и стандартный вывод в одно и то же место назначения. Перенаправление стандартных ошибок — это одна из самых известных вещей, которые не может сделать csh , поэтому, если вы хотите сделать это, ответ будет таким: это невозможно. (Конечно, это возможно — но только при использовании другой программы, такой как sh
. )Однако вы хотите перенаправлять stdout так же, как и stderr, и >&
делает именно это.
Если job_script >& logs
выдает какие-то выходные данные, значит, приложение записывает напрямую в терминал. Вы не можете захватить это с перенаправлением. Вы можете использовать команду script
для регистрации всего, включая вывод терминала, в файл.
script -c 'job_script' logs >/dev/null
При этом на дворе 2017 год. Прошло около 15 лет с тех пор, как (t )csh имел какое-либо преимущество перед bash в интерактивном использовании, около 25 лет перед zsh, а csh никогда не умел писать сценарии. Это больше, чем время, чтобы уйти в отставку.
В командной строке cshell
сделайте это, чтобы разделить потоки stdout/stderr:
( job_script > stdout.log ) >& stderr.log