bash - 如何在前一个命令之前执行命令?

时间:2012-01-10 14:34:50

标签: linux bash scripting

我想写一个脚本来模拟因某种原因被中断的过程。

所以我尝试运行杀死进程的东西 像这样的东西:

ssh -f localhost sleep 7;kill pid
call_function_from_another_script_that_runs_the_process

希望ssh命令因为“-f”而在后台运行,并且由于睡眠,kill命令不会很快执行。 问题是睡眠不会在这里生效。杀戮正在被立即执行。

如果我在没有-f的情况下运行ssh,那么第二行不会被调用,我的进程也不会运行。

请假设第二行如其所说 - 从另一个脚本运行一个函数来运行该过程。我不能“将该功能放在脚本中并运行它”或者改变其他已经写好的东西。

有什么想法吗?

感谢。

3 个答案:

答案 0 :(得分:7)

您无需使用ssh在后​​台运行某些内容。使用此:

(
    sleep 7
    kill pid
) &
call_function_from_another_script_that_runs_the_process

注意“&”它将整个子shell放在后台。在子shell中,首先运行sleep,然后运行kill

顺便提一下,示例中kill命令立即生效的原因是因为该行的脚本有两个命令:“ssh -f localhost sleep 7”和“kill pid”,而不是一个命令(“sleep 7;kill pid”)在SSH会话中。

答案 1 :(得分:1)

尝试引用您的ssh命令,如下所示。如果不引用,则分号标记ssh命令的结尾,因此在将ssh命令放入后台后立即执行第二个kill命令。

ssh -f localhost "sleep 7;kill pid"
call_function_from_another_script_that_runs_the_process

答案 2 :(得分:1)

使用&在后​​台运行您的流程。

some_long_running_process &
pid=$!
sleep 7
kill ${pid}

完成。