子命令语句分组?

时间:2012-12-07 20:40:08

标签: bash

今天我尝试了这个并且发现它不起作用有点惊讶:

$ nice -n 10 { ./configure && make ; }
-bash: syntax error near unexpected token `}'

有没有办法在“子命令”中使用分组?

2 个答案:

答案 0 :(得分:2)

你试过这个吗? =)

 nice -n10 bash -c './configure && make' 

答案 1 :(得分:1)

您不能只将shell语法传递给程序的argv并期望它理解它。具体来说,您看到的错误是由于&&;,它们是单独命令的“列表运算符”。 Bash试图将nice的参数评估为:

nice '-n' '10' '{' './configure'
然后

Bash尝试在&&make)之后评估下一个命令,然后尝试下一个命令}。从技术上讲,大括号既是“保留字”又是“控制操作符”。不同的贝壳对待裸露的牙齿有点不同,但这是一个深奥的细节。关键在于shell将是一个解析错误(如此处),或者由于无法找到名为“}”的命令而导致的错误(通常是前者。

此规则的例外仅存在于shell本身中。例如,Bash coproc关键字的工作方式与此类似,可以对您的参数进行特殊的解析和评估,就像在您的示例中一样。