今天我嘗試這樣做,有點吃驚地發現,它不工作:子命令語句分組?
$ nice -n 10 { ./configure && make ; }
-bash: syntax error near unexpected token `}'
有沒有辦法使用的「子」分組的方法嗎?
今天我嘗試這樣做,有點吃驚地發現,它不工作:子命令語句分組?
$ nice -n 10 { ./configure && make ; }
-bash: syntax error near unexpected token `}'
有沒有辦法使用的「子」分組的方法嗎?
您不能只將shell語法傳遞給程序的argv並期望它理解它。具體來說,你看到的錯誤是因爲&&
和;
,它們是分開命令的「列表操作符」。 Bash是試圖將參數計算爲nice
爲:
nice '-n' '10' '{' './configure'
猛砸,然後嘗試計算&&
(make
)之後的下一個命令,那麼下一個命令,這是}
。技術上,大括號既是「保留字」又是「控制操作符」。不同的炮彈對裸露的支撐有點不同,但這是一個深奧的細節。重點是取決於shell將會是一個解析錯誤(如這裏),或者由於找不到命名爲「}
」的命令(通常是前者)。
此規則的例外僅存在例如,Bash coproc
這個關鍵字就是這樣工作的,它可以對你的參數進行特殊的分析和評估,幾乎和你的例子一樣。
你試過嗎? =)
nice -n10 bash -c './configure && make'
無論如何,大括號都是假的;你不能很好地運行你已經運行的shell (當然,你自己可以'renice',但是這同樣會影響當前所有的shell。)換句話說,'nice'影響一個新進程,並且你(試圖成爲)不啓動一個新進程。 – tripleee