2012-05-08 58 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会,你会看到你有同样的问题。

相关问题