linux - 无法让 BASH 脚本等待 PID

标签 linux bash

我正在构建一个脚本,以便在设置服务器时让我的生活更轻松。

我对这一行有疑问:

# 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. 

我试图让我的脚本等待该过程完成后再继续。

脚本会执行,但不会等待,而是继续执行,并且安装程序会在脚本完成后运行。我还有其他安装程序需要在开始自己的进程之前安装此部分,因此需要等待。

我尝试过使用 $!等等,但由于这一部分是由单独的用户执行的,我不知道这是否可行。

感谢您的帮助。

最佳答案

命令SOA_PID = pgrep java 应该会导致错误。

尝试像这样捕获 PID:

SOA_PID=$( pgrep java ) || exit

|| exit 如果 pgrep 没有返回值则强制退出, 防止后续发生无意义的事情。 另一种方法是依靠 wait 立即返回, 但最好明确一点。

在函数中使用它时,您可以使用 || return 相反,取决于 视具体情况而定。

关于linux - 无法让 BASH 脚本等待 PID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40537236/

相关文章:

bash - 如何在一行中设置环境变量和执行命令(PowerShell)?

bash - xmlstarlet -v 到 $variable

mysql - 如何在 linux 中创建批量 mysql 上传脚本

c++ - 等待 DBus 服务在 Qt 中可用

linux - 如何自动刷新linux "echo -n"

regex - 如何在 shell 中使用正则捕获这个特定的字符串?

bash - 脚本函数中的 ssh 调用

linux - 如何让 Linux shell 命令堆栈只存储唯一的命令

database - 在 Linux 和 OSX 中创建数据库模型的程序

c++ - 运行我的程序说 "bash: ./program Permission denied"