Согласно вопросу:
Может ли переменная $? перезаписываться, когда между ними выполняется другая команда?
Ответ ДА. Переменная $? содержит статус выхода последней задачи. Например:
$ ложь; эхо $?
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 сообщения об ошибках идут где-то в фоновом режиме.