bash - 通过变量将后台运算符 (&) 附加到命令

标签 bash

这个有效:

${START} &

这行不通:

APPLICATION_OUTPUT=`echo &`
${START} ${APPLICATION_OUTPUT}

这也行不通:

APPLICATION_OUTPUT="&"
${START} ${APPLICATION_OUTPUT}

还是不行:

APPLICATION_OUTPUT=&
${START} ${APPLICATION_OUTPUT}

如何将“&”附加到带有 arg 的命令?

您可以让 START="FOO" 或更好的东西。

最佳答案

您有几个选项,大致是“安全的”和“不安全的”(第三个是“功能”)。

安全

if [ "$run_in_background" = "yes" ]
then ${START} &
else ${START}
fi

这只是选择要使用的模式。我假设 ${START} 周围没有双引号是可以的——你最好用一个数组来保存命令及其参数,然后使用双引号:"$ {START_ARRAY[@]}" 后面可以有一个 &

不安全

if [ "$run_in_background" = "yes" ]
then tail="&"
else tail=""
fi
eval ${START} $tail

这是一个令人担忧的操作。如果用户控制了 $START 的内容,您就无法确保他们没有提交会造成损害的代码。它还会重新读取通过连接 ${START}$tail 生成的字符串,然后重新扫描它。如果有空格或引号或其他特殊字符需要处理,您必须努力使 ${START} 对于 eval 是安全的。总的来说,这不是要走的路。

函数

start()
{
    ${START}
}

if [ "$run_in_background" = "yes" ]
then start &
else start
fi

“函数”相对于“保险箱”的优势在于您不必重复冗长且可能扭曲的命令行 — 您只需编写一次函数来执行所需的任何操作,然后调用函数是否在后台运行。

使用哪个?

“安全”或“功能”。两者都会起作用;两者都是合理的。

关于bash - 通过变量将后台运算符 (&) 附加到命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38494292/

相关文章:

bash - 意外 token “0”附近的语法错误

python - 组织python项目并设置环境

bash - 创建接受拖放的可执行 bash 脚本

bash - curl 可以默认使用 https 吗?

bash - 如何更改生成的子 bash 的 bash 提示符?特别是一个 docker shell

c++ - 编程语言包装器

python - 使用文件夹名称作为文本文件中的一列

bash - 如何在whiptail中循环case语句

python - 从 cron 运行 rethinkdb-dump 的问题

regex - 检查字符串是否按顺序包含嵌入字符串