2012-05-08 191 views
2

我試圖編寫一個腳本,它在命令行上接受一組命令(類似於如何使用「time」命令),讓它執行那組命令,然後根據返回的錯誤代碼做一些事情(如果您好奇,我會讓它回撥到我桌面上的語音守護程序來回顯命令,如果它失敗或成功 - 使用此命令一些長時間運行的構建過程)如何將一組命令傳遞給bash中的shell腳本

使用UNIX命令的時間,如果我有命令的列表,我可以運行

> time (do_build && deploy_build) 

隨着我的命令(我稱之爲tellme),當我嘗試這個,我得到

> tellme (do_build && deploy_build) 
bash: syntax error near unexpected token `do_build' 

它似乎並不喜歡的一組命令作爲參數,即使同樣的事情的時間命令工作正常。

任何想法?

+1

你能告訴我們你腳本的部分嗎? –

回答

2

我猜你必須做一些像

tellme 'do_build && deploy_build' 

而且裏面Tellme公司

eval "$*" 
1

time實際執行其(do_build && deploy_build)參數,並等待它。

$ time (sleep 1; echo hello world;); 
mundo 

real 0m1.098s 
user 0m0.030s 
sys  0m0.000s 

$ echo asd (sleep 1; echo hello world;); 
bash: syntax error near unexpected token `(' 

$ (sleep 1; echo hello world;); 
mundo 

無論你想要什麼,你都不能使用子殼。

你的情況,你需要使用類似

$ (sleep 1; echo hello world) && tellme && echo done; 
+0

關於subshel​​l的更多信息。由於我想讓tellme命令知道正在運行的命令行,所以它可以將它回顯給我(如果我有幾個作業正在運行,我將知道哪一個完成了),所以建議的解決方案沒有完成我所需要的。 – Andrew

+0

@很好,然後做你想做的事情,而不用修改'tellme'這是不可能的。你必須讓'tellme'接受參數來執行命令(比如timemessage,例如'tellme'(sleep 1; echo hello world)''並且從'tellme'運行$ 1或者接受一個消息參數,比如'(sleep 1;回聲你好世界);告訴你'你好世界完成!' – KurzedMetal

0

你可以做

tellme "$(do_build && deploy_build)" 

時間是一個bash內建命令,如果你使用的不是時間的/ usr/bin/time會,你會看到你有同樣的問題。

相關問題