将用户提供的命令写入文件

问题描述 投票:1回答:1

我需要用bash将用户提供的命令写入文件。

测试用例将是script.sh -- echo "Hello \$USER",我想要一个包含echo "Hello $USER"(或echo Hello\ $USER)的文件,可以执行

我正在使用heredoc写入文件,所以类似于

cat > "${FILE}" <<EOF
Your command is:
${CMD}
"$@"
EOF

我尝试使用printf -v CMD '%q ' "$@",但这导致echo Hello\ \$USER这不是我想要的。

我该怎么做呢?

bash heredoc variable-expansion
1个回答
1
投票

基于手动执行的建议,我使用以下推理得出以下结果:

  • "$@"语法意味着:将所有args扩展为"$1" "$2" ...
  • 这似乎不适用于我的情况,所以手动:
    CMD=()
    for var in "$@"; do
        CMD+=( '"'"${var}"'"' )
    done

    cat > ${FILE} <<EOF
    Your command is: 
    ${CMD[@]}

所以基本上:创建一个带引号的字符串数组。然后打印出来。这适用于测试用例。

但是:很多其他事情都失败了。示例:myScript.sh -- echo "Hello \"\$USER\""留下未转义的引号。

所以我得出结论,这个任务是不可能的,或者至少是不可行的,并建议使用基于printf的解决方案,这似乎也是其他命令处理它的方式(例如:SLURM上的srun/sbatch

© www.soinside.com 2019 - 2024. All rights reserved.