Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 子命令语句分组?_Bash - Fatal编程技术网

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本身中。例如,Bash
coproc
关键字的工作方式类似于此,可以对其参数进行特殊的解析和评估,几乎与您的示例中的情况完全相同。

这里的大括号是假的;您无法对已经运行的shell进行修饰。(当然,您可以自己
renice
,但这同样会影响当前所有shell。)换句话说,
nice
会影响一个新进程,而您(试图)不会启动一个新进程。
nice '-n' '10' '{' './configure'