Bash 子命令语句分组?
今天我尝试了这个,但有点惊讶地发现它不起作用:Bash 子命令语句分组?,bash,Bash,今天我尝试了这个,但有点惊讶地发现它不起作用: $ nice -n 10 { ./configure && make ; } -bash: syntax error near unexpected token `}' 有没有在“子命令”中使用分组的方法?您尝试过吗?=) 您不能只是将shell语法传递给程序的argv,并期望它理解它。具体地说,您看到的错误是由于&&和,它们是分隔命令的“列表运算符”。Bash正在尝试将nice的参数计算为: nice '-n' '10' '{'
$ nice -n 10 { ./configure && make ; }
-bash: syntax error near unexpected token `}'
有没有在“子命令”中使用分组的方法?您尝试过吗?=)
您不能只是将shell语法传递给程序的argv,并期望它理解它。具体地说,您看到的错误是由于
&&
和代码>,它们是分隔命令的“列表运算符”。Bash正在尝试将nice
的参数计算为:
nice '-n' '10' '{' './configure'
Bash然后尝试计算&&
(make
)之后的下一个命令,然后计算下一个命令,即}
。从技术上讲,大括号既是“保留字”又是“控制运算符”。不同的壳对裸支架的处理略有不同,但这是一个深奥的细节。这一点取决于shell,它要么是解析错误(如此处),要么是由于无法找到名为“}
”的命令(通常是前者)而导致的错误
此规则的例外情况仅存在于shell本身中。例如,Bashcoproc
关键字的工作方式类似于此,可以对其参数进行特殊的解析和评估,几乎与您的示例中的情况完全相同。这里的大括号是假的;您无法对已经运行的shell进行修饰。(当然,您可以自己renice
,但这同样会影响当前所有shell。)换句话说,nice
会影响一个新进程,而您(试图)不会启动一个新进程。
nice '-n' '10' '{' './configure'