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