在同一个shell中执行一个块

时间:2013-07-03 18:48:09

标签: linux bash shell

我试图找到一种执行块的方法,就像执行调用外部脚本的代码一样。

让我举例说明......

# caller.sh
!#/bin/bash

/soft/executer.sh &

执行“caller.sh”后,“ps”命令返回类似于:

PID   TTY      TIME     CMD
19566 pts/7    00:00:00 bash
22689 pts/7    00:00:00 executer.sh
22694 pts/7    00:00:00 ps

但如果改变调用脚本“caller.sh”的方式如下:

# caller.sh
!#/bin/bash

    {
    /soft/executer.sh
    } &

“ps”命令显示两个命令(caller.sh和executer.sh)

PID   TTY      TIME     CMD
19566 pts/7    00:00:00 bash
22689 pts/7    00:00:00 caller.sh
22694 pts/7    00:00:00 ps
22685 pts/7    00:00:00 executer.sh

“caller.sh”和“ler.sh”命令都出现了。

我知道我可以简单地使用第一个选项来调用它,但这只是一个简单的例子,询问如何在第二个使用块的示例中取消进程“caller.sh”和“execute.sh”

由于

1 个答案:

答案 0 :(得分:1)

我会在caller.sh中尝试这个:

#!/bin/bash

(
    exec /soft/executer.sh
)&

问题是块或子shell只是父级的副本,这意味着父级可能已经消失,但子级具有相同的名称因此显示在ps中。所以,如果你有:

    #!/bin/bash

    (
        /soft/executer.sh
    )&
    sleep 60

您将看到两个caller.sh(父级和子级)副本。父母正在睡觉,孩子正在等待executer.sh完成。