bash - 将输出作为文件名执行
问题描述
在我的一个 Bash 脚本中,有一点我有一个SCRIPT
包含 的变量/path/to/an/exe
,而脚本最终需要做的是执行该可执行文件。因此脚本的最后一行是
$($SCRIPT)
所以$SCRIPT
扩展为/path/to/an/exe
, 并$(/path/to/an/exe)
执行可执行文件。
但是,shellcheck
在脚本上运行会生成此错误:
In setscreens.sh line 7:
$($SCRIPT)
^--------^ SC2091: Remove surrounding $() to avoid executing output.
For more information:
https://www.shellcheck.net/wiki/SC2091 -- Remove surrounding $() to avoid e...
$($SCRIPT)
有没有办法以更合适的方式重写它?eval
在这里似乎没有太大帮助。
解决方案
$($SCRIPT)
确实没有做你认为它做的事情。
外部$()
将执行括号内的任何命令并执行结果字符串。
内部$SCRIPT
将扩展为SCRIPT
变量的值并执行此字符串,同时在空格/上拆分单词
如果你想执行包含在SCRIPT
变量中的命令,你只需要写一个例子:
SCRIPT='/bin/ls'
"$SCRIPT" # Will execute /bin/ls
现在,如果您还需要使用SCRIPT
变量命令调用处理参数:
SCRIPT='/bin/ls'
"$SCRIPT" -l # Will execute /bin/ls -l
要动态存储或构建参数,您需要一个数组而不是字符串变量。
例子:
SCRIPT=(/bin/ls -l)
"${SCRIPT[@]}" # Will execute /bin/ls -l
SCRIPT+=(/etc) # Add /etc to the array
"${SCRIPT[@]}" # Will execute /bin/ls -l /etc
推荐阅读
- swift - macOS:从 CharacterPalette 中获取 Emoji(修订版)
- amazon-cloudformation - 创建 RDS 数据库用户 CloudFormation
- javascript - 随机化脚本中的颜色
- php - 从 mysql 中选择等于 URL 的值
- mysql - MySQL 每天只从相似记录中选择一条记录
- c# - 在不引发异常的情况下使异步方法失败
- flutter - 如何访问小部件或刚刚单击的按钮的文本?
- amazon-web-services - 如何使用 CRON 表达式在 AWS 中创建规则
- c - 为什么默认情况下未优化未引用的符号?
- javascript - 如何更改点击图标?