2016-11-10 4 views
-1

Я создаю скрипт, чтобы упростить мою жизнь при настройке серверов.Невозможно заставить 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. 

Я пытаюсь получить мой сценарий ждать завершения процесса, прежде чем она продолжается.

Сценарий выполняется, но вместо ожидания он продолжается, и выполнение установки выполняется после завершения сценария. У меня есть другие части установщика, которым нужна эта часть, прежде чем они начнут свой собственный процесс, и, следовательно, ожидают.

Я пробовал использовать $! и т. д., но поскольку эта часть выполняется отдельным пользователем, я не знаю, будет ли это работать.

Спасибо за любую помощь.

+1

Запустите свой скрипт через http://shellcheck.net и вернитесь, когда исправили ошибки, которые он сообщает :-) – andlrc

+1

'SOA_PID = pgrep java' должно быть чем-то вроде SOA_PID = $ (pgrep java)' - - нет пробелов и вызывать подпроцесс (бит $ (...)). И вам, вероятно, нужно иметь дело с несколькими java-процессами, поэтому 'grep' возвращает несколько значений ..... – gilez

+0

You «Не запускайте сценарий в фоновом режиме, так что ждать нечего. И процесс может ждать только своих собственных детей - вы не можете дождаться процесса, выполняемого 'su', потому что он является дочерним элементом оболочки, выполняемой' su', а не дочерним элементом вашей исходной оболочки. – Barmar

ответ

1

Команда SOA_PID = pgrep java должна приводить к ошибке.

Попробуйте захватить PID, как это:

SOA_PID=$(pgrep java) || exit 

|| exit заставляет выход, если pgrep не возвращает значение, предотвращение нонсенс происходит дальше. Альтернативой было бы полагаться на wait для немедленного возврата, , но лучше быть явным.

При использовании этого параметра вы должны использовать || return, в зависимости от по обстоятельствам.

+0

@sorontar Включено, что в ответ, это стиль, который я предпочитаю в любом случае. –

Смежные вопросы