bash – 无法从shell脚本调用Openscad -D命令行
发布时间:2020-12-15 22:04:10 所属栏目:安全 来源:网络整理
导读:我在Ubuntu linux上使用openscad命令从命令行生成模型.我最终成功运行了openscad命令,使用-D参数覆盖变量值: $openscad -o output.stl -D 'param1="name1"' -D 'param2="name2"' openscad-script.scad 编辑:注意我们必须传递-D参数的方式,单引号和双引号必
我在Ubuntu
linux上使用openscad命令从命令行生成模型.我最终成功运行了openscad命令,使用-D参数覆盖变量值:
$openscad -o output.stl -D 'param1="name1"' -D 'param2="name2"' openscad-script.scad 编辑:注意我们必须传递-D参数的方式,单引号和双引号必须根据因为Openscad documentation. 但当我生成&从shell脚本执行相同的命令,openscad失败并出现错误: $./myscript.sh value1 value2
其中XX =文件的最后一行. 这是bash脚本 #!/bin/bash # run openscad command param1="-D 'param1="$1"'" param2="-D 'param2="$2"'" echo "openscad -o $1-$2.stl $param1 $param2 openscad-script.scad" openscad -o $1-$2.stl $param1 $param2 openscad-script.scad 这看起来很简单,我仍然无法弄清楚opencad在运行命令时失败的原因. 谢谢你的帮助, 编辑:我发现了一种让它工作的方法,可能不是最好的 #!/bin/bash # run openscad command param1="-D 'param1="$1"'" param2="-D 'param2="$2"'" command = "openscad -o $1-$2.stl $param1 $param2 openscad-script.scad" eval $command 解决方法
如果您的命令行是:
openscad -o name1-name2.stl -D 'param1="name1"' -D 'param2="name2"' openscad-script.scad …然后执行此操作的正确脚本将是: #!/bin/bash openscad -o "$1-$2.stl" -D "param1="$1"" -D "param2="$2"" openscad-script.scad …或者,如果你真的想因为某种原因在多行上建立东西: #!/bin/bash args=( -o "$1-$2.stl" ) args+=( -D "param1="$1"" ) args+=( -D "param2="$2"" ) openscad "${args[@]}" openscad-script.scad openscad字面上无法知道命令行中是否使用了单引号或双引号,因此没有可强制执行的方法来要求单引号.而且,shell引用是逐个字符的属性!也就是说: 'param1="name1"' # becomes the C string "param1="name1"" 导致完全相同的字符串传递为: param1='"name1"' # becomes the C string "param1="name1"",same as above 要么 param1='"'name1'"' # becomes the C string "param1="name1"",same as above ……当这些值都是常数时.但是,当name1被替换为$1之类的东西时,根据使用的引号类型,含义会变得非常不同: set -- name1; IFS=0123456789 "param1="$1"" # becomes the C string "param1="name1"",as above 'param1="$1"' # becomes the C string "param1="$1"",not substituting name1 # ...and,as an example of something to look out for: param1='"'$1'"' # becomes TWO C strings,"param1="name" and """,due to bad quoting # ...the IFS above makes it split on numbers; by default this risk would happen with spaces (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |