1

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

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

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

4

2 回答 2

2

你试过这个吗?=)

 nice -n10 bash -c './configure && make' 
于 2012-12-07T20:41:56.940 回答
1

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

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

然后 Bash 尝试评估&&( make) 之后的下一个命令,然后是下一个命令,即}. 从技术上讲,大括号既是“保留字”又是“控制运算符”。不同的贝壳对裸牙套的处理方式略有不同,但这是一个深奥的细节。关键取决于shell,它要么是解析错误(如这里),要么是由于无法找到名为“ }”的命令而导致的错误(通常是前者。

此规则的例外情况仅存在于 shell 本身中。例如,Bashcoproc关键字的工作方式就是这样,几乎可以像在您的示例中那样对其参数进行特殊的解析和评估。

于 2012-12-07T20:56:24.600 回答