首页 > 解决方案 > Bash脚本:在变量中存储带有空格和参数的命令,然后执行

问题描述

已经把我的头撞在墙上几个小时了,所以是时候打电话给专家了。编写一个小脚本来在我办公室的一个系统上运行一些报告,我被要求为它处理一个 Bash 脚本。名为“auto_rep”的程序采用各种选项,例如“-t”运行一项任务(生成一种类型的报告)和“-1”在一项任务后退出。从命令行运行命令时,选项用空格分隔。该命令直接从命令行工作,但我无法让它从脚本工作......

以下是导致我出现问题的代码片段:

cmd=$(auto_rep -t createfin1report -1)
echo "running ${cmd} command..."
echo
eval $cmd

问题是当我运行脚本时,只运行命令的“auto_rep”部分(来自 $cmd 变量);基本上运行程序没有任何选项。它会在没有命令的“-t createfin1report -1”部分的情况下创建大量报告(哎呀!)。很高兴我只在我们的测试系统上尝试过。

有人有任何提示可以帮助我吗?我的方法有问题吗?顺便说一句 - 曾尝试将命令存储在非数组中(cmd="auto_rep -t createfin1report -1"),这让我因“找不到命令”错误而头疼:)...

提前致谢!

标签: linuxbashshell

解决方案


将输出保存到一个数组,然后执行这个数组。

declare -a cmd
cmd=( $(auto_rep -t createfin1report -1) )
echo Executing: "${cmd[@]}"
"${cmd[@]}"

请确保输出是有效命令,并且空格已正确放置在双引号中。


推荐阅读