今天我尝试了这个并且发现它不起作用有点惊讶:
$ nice -n 10 { ./configure && make ; }
-bash: syntax error near unexpected token `}'
有没有办法在“子命令”中使用分组?
答案 0 :(得分:2)
nice -n10 bash -c './configure && make'
答案 1 :(得分:1)
您不能只将shell语法传递给程序的argv并期望它理解它。具体来说,您看到的错误是由于&&
和;
,它们是单独命令的“列表运算符”。 Bash试图将nice
的参数评估为:
nice '-n' '10' '{' './configure'
然后 Bash尝试在&&
(make
)之后评估下一个命令,然后尝试下一个命令}
。从技术上讲,大括号既是“保留字”又是“控制操作符”。不同的贝壳对待裸露的牙齿有点不同,但这是一个深奥的细节。关键在于shell将是一个解析错误(如此处),或者由于无法找到名为“}
”的命令而导致的错误(通常是前者。
此规则的例外仅存在于shell本身中。例如,Bash coproc
关键字的工作方式与此类似,可以对您的参数进行特殊的解析和评估,就像在您的示例中一样。