linux - 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"),这让我因“找不到命令”错误而头疼:)...
提前致谢!
解决方案
将输出保存到一个数组,然后执行这个数组。
declare -a cmd
cmd=( $(auto_rep -t createfin1report -1) )
echo Executing: "${cmd[@]}"
"${cmd[@]}"
请确保输出是有效命令,并且空格已正确放置在双引号中。
推荐阅读
- spring-boot - 参数化 build.gradle 后,“gradle test”停止工作
- ldap - 尝试将用户添加到 LDAP 时收到无效凭据 (49)
- firebase - Firestore如何结合“AND”逻辑执行多个“OR”查询?
- python - 将一个数组连接到另一个数组中?
- django - 如何使用 Django 加入带有外部 API 的表?
- java - 线程“主”java.util.NoSuchElementException errorr 中的异常
- go - 尝试:除了:通过但在 Go 中?(当出现网络问题时让 Go 不会崩溃?)
- javascript - 在 Django 中从后端到前端操作和传递 JSON
- laravel - 使用 Dropbox 驱动程序无法从 Laravel 上传到 Dropbox
- sql-server - 将 Excel 公式(逻辑)转换为 SQL Server