【问题标题】:How do I start one shell script as process from another shell script如何从另一个 shell 脚本启动一个 shell 脚本作为进程
【发布时间】:2016-04-26 03:21:14
【问题描述】:

我想通过在主机上运行的 script1.sh 执行此操作

#!/bin/sh

# adb shell "sh /sdcard/script2.sh &"

script2.sh 位于 /sdcard/ 文件夹内的 android 设备上。

我希望 script2.sh 继续在 Android 上运行。 script2.sh 有无限循环。 但是上面的命令不起作用。 script1.sh 退出后,script2.sh 立即停止。

我也试过

# adb shell "exec sh /sdcard/script2.sh &"

但这也行不通。

【问题讨论】:

    标签: android linux bash shell adb


    【解决方案1】:

    在您的父 shell 脚本中,提取子进程 script2.sh 的 pid。 然后使用 wait 系统命令等待其完成。

    wait <PID>
    

    更多详情请参考link

    【讨论】:

    • 我不想等。我希望我的第一个脚本退出。
    【解决方案2】:

    adb shell "nohup sh /sdcard/script2.sh &"

    您可以使用 nohup 代替 exec。 nohup 所做的是,只要 script1 退出,它就会使您的 script2 成为 init 进程的子进程(所有进程的父进程)。

    【讨论】:

    • 感谢您的回答。如果我使用 nohup,如果我直接在 android 设备 nohup sh /sdcard/script2.sh -l & 上执行命令,则命令有效,但如果我从主机执行命令则无效: adb shell "nohup sh /sdcard/script2.sh & " 我以 root(adb root) 身份启动了 adb 会话,所以没有权限问题。
    • 没有收到任何错误,但 script2.sh 应该将记录数据保留到不会进入日志文件的 android 设备上的日志文件中。如果我直接在 android 设备“nohup sh /sdcard/script2.sh -l &”上执行命令,我会看到数据进入日志文件。