如何在bash中将一组命令传递给shell脚本

时间:2012-05-08 19:13:36

标签: bash

我正在尝试编写一个脚本,它在命令行中接受一组命令(类似于你如何处理“time”命令),让它执行那组命令然后根据错误代码返回做一些事情(如果你好奇,我正在回调我桌面上的一个语音守护进程来回显命令,如果它失败或成功 - 使用它来进行一些长时间运行的构建过程)

使用unix time命令,如果我有一个可以运行的命令列表

> time (do_build && deploy_build)

当我尝试使用我的命令(我称之为tellme)时,我得到了

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

它似乎不喜欢命令组作为参数,即使完全相同的事情适用于time命令。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

我猜你必须要做像

这样的事情
tellme 'do_build && deploy_build'

在里面告诉

eval "$*"

答案 1 :(得分: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;

答案 2 :(得分:0)

你可以做到

tellme "$(do_build && deploy_build)"

时间是内置的bash,如果你使用/ usr / bin / time而不是时间,你会看到同样的问题。