Согласно вопросу:
Может ли переменная $?
перезаписываться, когда между ними выполняется другая команда?
Ответ ДА. Переменная $?
содержит статус выхода последней задачи. Например:
$ ложь; эхо $?
1
$ ложь; истинный; эхо $?
0
$ ложь; истинный; ЛОЖЬ; эхо $?
1
Вроде как переменная $!
содержит PID последней фоновой задачи.
Справка: Devhints.io: шпаргалка по сценариям Bash
Согласно вопросу:
Это подожди
возиться с асинхронным способом нет
?
Не должен - разве он не предназначен именно для таких задач? :)
Согласно вопросу:
А может эта логика просто тупая и просто есть подход получше?
Для меня непонятно, почему вы нажимаете rsync
в задний план а потом ждать
вместо этого просто выполните команду, а затем выполните тест.
#!/бин/баш
rsync -a исходный файл. файл назначения. файл 2>/dev/null
если [[$? -экв 0 ]]; затем эхо "УСПЕХ"; иначе эхо "НЕУДАЧА"; фи
2>/dev/ноль
используется здесь для подавления сообщений об ошибках rsync
, но вы можете сохранить их во временном файле и прикрепить к электронному письму.
Но, наверное, это не весь сценарий...
Кроме того, в первых рядах помогите подождать
предоставляется следующая информация.
ждать: ждать [-fn] [id ...]
Дождитесь завершения задания и возврата статуса выхода.
Таким образом, вы можете использовать вывод ждать
непосредственно в если
утверждение. Я уже сделал успешный тест для этого подхода.
#!/бин/баш
nohup rsync -a исходный файл.файл назначения.файл 2>/dev/null &
старыйpid=$!
если подождать $oldpid
тогда
эхо "УСПЕХ"
еще
эхо "НЕ ПРОЙДЕНО"
фи
2>/dev/ноль
используется здесь для подавления сообщений об ошибках нет
, пока rsync
сообщения об ошибках идут где-то в фоновом режиме.