Есть команда texi2pdf (1)
(часть texinfo-tex
] здесь, в Fedora), который выполняет действия из источников .texi
(TeXinfo) для документации GNU info
.
Сами файлы .texi
обычно входят в пакеты с исходным кодом. Вы должны уметь создавать документацию в формате PDF с помощью стандартного ./ configure; заставить
танцевать или, возможно, сделать doc
.
Обратите внимание, что некоторые команды объединены, find
в findutils
и множество стандартных команд Unix в coreutils
. Их документация является частью более крупного документа и, вероятно, не может быть создана отдельно.
В:
cmd1
cmd2
или
cmd1; cmd2
Они выполняются последовательно.
В
cmd1 && cmd2
или
cmd1 || cmd2
Они выполняются последовательно, но выполняется ли cmd2
вообще, зависит от того, успешно ли cmd1
выполняется (для &&
) или не выполняется (для ||
).
В
cmd1 | cmd2
,
cmd1 & cmd2
cmd1 |& cmd2 # ksh
coproc cmd1; cmd2 # bash/zsh
или
cmd1 <(cmd2) # ksh/zsh/bash (also yash though with a different meaning)
Они выполняются одновременно. В первом случае некоторые оболочки ждут только cmd2
, прежде чем продолжить выполнение остальной части скрипта, а некоторые ждут и того, и другого. Во втором случае оболочки ждут только cmd2
( cmd1
считается запущенным асинхронно (или в фоновом режиме при запуске в интерактивной оболочке)), а в третьем - cmd1
( cmd2
асинхронный).
In:
< "$(cmd1)" x=$(cmd2) y=$(cmd3) cmd4 "$(cmd5)" > "$(cmd6)"
Команды выполняются последовательно, но порядок зависит от оболочки. В любом случае cmd4
будет выполняться последним.
В:
cmd1 =(cmd2) # zsh
Они выполняются последовательно (сначала cmd2
).
Обратите внимание, что во всех этих случаях любая из этих команд может запускать другие процессы. Оболочка ничего о них не знает, поэтому не может их дождаться.
Чтобы ответить на ваш заглавный вопрос: Да, команды в сценарии оболочки выполняются синхронно в последовательности, поэтому оболочка блокируется, пока выполняется ваш сценарий Python.
Конечно, было бы лучше исправить источник ошибки, но если это невозможно, то разумным подходом будет shell-сценарий, который будет пытаться выполнить сценарий python, пока не вернет нулевой код состояния (while true;do ./script.py; if [["$?" = 0]];break;done
).