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