2012-12-07 56 views
1

今天我嘗試這樣做,有點吃驚地發現,它不工作:子命令語句分組?

$ nice -n 10 { ./configure && make ; } 
-bash: syntax error near unexpected token `}' 

有沒有辦法使用的「子」分組的方法嗎?

+0

無論如何,大括號都是假的;你不能很好地運行你已經運行的shell (當然,你自己可以'renice',但是這同樣會影響當前所有的shell。)換句話說,'nice'影響一個新進程,並且你(試圖成爲)不啓動一個新進程。 – tripleee

回答

1

您不能只將shell語法傳遞給程序的argv並期望它理解它。具體來說,你看到的錯誤是因爲&&;,它們是分開命令的「列表操作符」。 Bash是試圖將參數計算爲nice爲:

nice '-n' '10' '{' './configure' 

猛砸,然後嘗試計算&&make)之後的下一個命令,那麼下一個命令,這是}。技術上,大括號既是「保留字」又是「控制操作符」。不同的炮彈對裸露的支撐有點不同,但這是一個深奧的細節。重點是取決於shell將會是一個解析錯誤(如這裏),或者由於找不到命名爲「}」的命令(通常是前者)。

此規則的例外僅存在例如,Bash coproc這個關鍵字就是這樣工作的,它可以對你的參數進行特殊的分析和評估,幾乎和你的例子一樣。

2

你試過嗎? =)

nice -n10 bash -c './configure && make'