Я создаю скрипт, чтобы упростить мою жизнь при настройке серверов.Невозможно заставить BASH-скрипт ждать PID
Я имею проблему с этой линией:
# Code to MV/CP/CHOWN files (working as intended)
sudo su $INSTALL_USER -c \
"sh $SOFTWARE_DIR/soa/Disk1/runInstaller \
-silent -response $REPONSE_LOC/response_wls.rsp \
-invPtrLoc $ORA_LOC/oraInsta.loc \
-jreLoc /usr/java/latest" >&3
SOA_PID = pgrep java
wait $SOA_PID
# Code below this which requires this be completed before execution.
Я пытаюсь получить мой сценарий ждать завершения процесса, прежде чем она продолжается.
Сценарий выполняется, но вместо ожидания он продолжается, и выполнение установки выполняется после завершения сценария. У меня есть другие части установщика, которым нужна эта часть, прежде чем они начнут свой собственный процесс, и, следовательно, ожидают.
Я пробовал использовать $! и т. д., но поскольку эта часть выполняется отдельным пользователем, я не знаю, будет ли это работать.
Спасибо за любую помощь.
Запустите свой скрипт через http://shellcheck.net и вернитесь, когда исправили ошибки, которые он сообщает :-) – andlrc
'SOA_PID = pgrep java' должно быть чем-то вроде SOA_PID = $ (pgrep java)' - - нет пробелов и вызывать подпроцесс (бит $ (...)). И вам, вероятно, нужно иметь дело с несколькими java-процессами, поэтому 'grep' возвращает несколько значений ..... – gilez
You «Не запускайте сценарий в фоновом режиме, так что ждать нечего. И процесс может ждать только своих собственных детей - вы не можете дождаться процесса, выполняемого 'su', потому что он является дочерним элементом оболочки, выполняемой' su', а не дочерним элементом вашей исходной оболочки. – Barmar