shell脚本:在后台运行一段代码而不定义新函数?

mat*_*ick 14 shell background

有没有办法在后台运行"内联"代码块而不将块定义为函数?我想的是:

( do something; a bit more; finally this ) &
( more things; etc ...; ) &
wait
proceed ... 
Run Code Online (Sandbox Code Playgroud)

我想它只有一行额外定义一次使用功能,然后立即使用它,但我很好奇,没有找到任何搜索.

Sie*_*geX 23

#!/bin/sh
{
    echo "sleeping for 5 seconds"
    sleep 5
    echo "woke up"
} &
echo "waiting"
wait
echo "proceed"
Run Code Online (Sandbox Code Playgroud)

产量

$ ./bgblock
waiting
sleeping for 5 seconds
woke up
proceed
Run Code Online (Sandbox Code Playgroud)

  • 有人可以以易于记住的方式澄清`{ cmd; 之间的功能区别是什么吗?cmd; } &` 和`( cmd; cmd; ) &`? (2认同)
  • 是的 `{...}` 不会创建子 shell,而 `(...)` 会。你的错误的原因是你试图背景的东西没有创建一个子外壳 (2认同)