是(...)此代码中的子shell还是别的?

时间:2018-02-13 06:16:59

标签: sh posix subshell

在我的POSIX shell函数中:

<div class='items'>
  <div class='item' id= 'wrk'><image xlink:href="https://www.svgrepo.com/show/62382/low-battery.svg" /><div class='bullet' id='foo'></div><div class='label'>foo</div></div>
  <div class='item-selected' id = 'brk'><div class='bullet' id='bar'></div><div class='label'>bar</div></div>
</div>

<svg>       
<image xlink:href="https://www.svgrepo.com/show/62382/low-battery.svg" />    
</svg>

此代码中的disable_mouse_for_a_second() { if xinput --disable "$1" 2> /dev/null then ( sleep 1s xinput --enable "$1" ) & return 0 else return 1 fi } ... (是否为子shell?

1 个答案:

答案 0 :(得分:3)

您的问题的简短回答是。问题的原因只不过是单行:

( sleep 1s; xinput --enable "$1"; ) &

分布在多条线上。它只执行(和背景)sleepxinput命令。

您将看到的多行上写的两个主复合命令是:

(list)        ## and 
{ list; }

两者之间的区别是(list)子shell 环境中执行,影响shell环境的变量赋值和内置命令在命令完成后不会保持有效。

{ list; }列表只是在当前shell环境中执行。