我正在尝试编写一个脚本,它在命令行中接受一组命令(类似于你如何处理“time”命令),让它执行那组命令然后根据错误代码返回做一些事情(如果你好奇,我正在回调我桌面上的一个语音守护进程来回显命令,如果它失败或成功 - 使用它来进行一些长时间运行的构建过程)
使用unix time命令,如果我有一个可以运行的命令列表
> time (do_build && deploy_build)
当我尝试使用我的命令(我称之为tellme
)时,我得到了
> tellme (do_build && deploy_build)
bash: syntax error near unexpected token `do_build'
它似乎不喜欢命令组作为参数,即使完全相同的事情适用于time命令。
有什么想法吗?
答案 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而不是时间,你会看到同样的问题。