带有shell脚本变量的Bash命令,该脚本变量本身作为带有空格的参数
试图做叠瓦式逃生,但显然不起作用。 我的带空格的参数是带有shell脚本变量的Bash命令,该脚本变量本身作为带有空格的参数,bash,parameters,Bash,Parameters,试图做叠瓦式逃生,但显然不起作用。 我的带空格的参数是customer,其值是NAME with space chroot /sites/FOLDER1 /bin/su FOLDER2 -c "/data/batch/myScript.sh -v -g -action params -customer NAME WITH SPACE" 我得到: 错误:具有未知参数 我读了一些关于这些主题的文章,但没有找到解决方案: 尝试使用单引号和双引号,将参数存储在变量等中,但不使用骰子 如果我使用 ch
customer
,其值是NAME with space
chroot /sites/FOLDER1 /bin/su FOLDER2 -c "/data/batch/myScript.sh -v -g -action params -customer NAME WITH SPACE"
我得到:
错误:具有未知参数
我读了一些关于这些主题的文章,但没有找到解决方案:
尝试使用单引号和双引号,将参数存储在变量等中,但不使用骰子
如果我使用
chroot /sites/FOLDER1 /bin/su FOLDER2 -c '/data/batch/myScript.sh -v -g -action params -customer 'NAME WITH SPACE''
它工作得更好一点,因为我没有得到未知参数,但它只将名称作为参数,忽略空格后的内容su-c“script text”
启动一个单独的shell解释器,将脚本文本
解析为代码。因此,该文本需要以eval
安全的方式转义printf“%q”
为bash执行此操作(如果您的/bin/sh
是bash的符号链接,那么它将非常健壮)
即:
printf -v cmd '%q ' /data/batch/myScript.sh -v -g -action params -customer "NAME WITH SPACE"
chroot /sites/FOLDER1 /bin/su FOLDER2 -c "$cmd"
如果您的BASH不提供代码< >/bin /s< /COD>,那么您应该考虑一个替代的实现,生成纯POSIX兼容的输出,如Python < Cudio>管道> .QuoTe](/Cult>库函数:
pyquote() {
python -c 'import pipes, sys; print " ".join(pipes.quote(a) for a in sys.argv[1:])' "$@"
}
cmd=$(pyquote /data/batch/myScript.sh -v -g -action params -customer "NAME WITH SPACE")
chroot /sites/FOLDER1 /bin/su FOLDER2 -c "$cmd"
谢谢,但是我仍然可以用
声明--cmd=“/data/batch/myScript.sh-v-g-action params-customer NAME\\WITH\\SPACE”
是chroot/sites/FOLDER1/bin/su FOLDER2-c“$cmd”
从聊天中总结出一个未知参数:myScript.sh
,使用$*
而不是“$@”
对参数进行迭代;修复该问题后,给定的解决方案现在可以正常工作。