OpenSCAD Shell脚本批量导出异常:文件无名称且报变量忽略警告
问题分析与解决方法
核心问题
你的问题出在OpenSCAD代码与Shell脚本的参数传递逻辑不匹配:
- OpenSCAD里的
name = read_string();是从**标准输入(stdin)**读取内容,而非读取命令行通过-D传递的变量,导致你通过-D name="$name"传的名称完全没生效。 - 非交互模式下运行OpenSCAD时,
read_string()会等待输入但没有获取到内容,所以生成的文件无名称。 - 警告
Ignoring unknown variable 'EVA'是因为命令行参数-D name="$name"展开后为-D name=EVA,OpenSCAD把EVA当成了变量名而非字符串值,找不到对应变量就抛出警告。
解决方法
方案1:修改OpenSCAD代码,支持命令行传参
把OpenSCAD开头的代码改成以下形式,优先使用命令行传递的变量,兼容交互式输入:
// 若命令行传入name变量则使用该值,否则从标准输入读取 name = $name != undef ? $name : read_string();
或直接改为仅支持命令行传参(更简洁):
name = $name;
然后修改Shell脚本中的命令行参数,确保传递的是字符串值(避免警告):
/Applications/OpenSCAD.app/Contents/MacOS/OpenSCAD -o "$name".stl -D 'name="'$name'"' generator.scad
方案2:不修改OpenSCAD代码,修改Shell脚本传递标准输入
保持read_string()不变,通过管道将名称作为标准输入传给OpenSCAD,同时修复循环读取名称的逻辑(兼容含空格的名称):
#!/bin/bash # Check if the names.txt file exists if [ ! -f names.txt ]; then echo "Error: names.txt file does not exist!" exit 1 fi # 逐行读取名称,跳过空行 while IFS= read -r name; do [ -z "$name" ] && continue # 通过管道传递名称给read_string() echo "$name" | /Applications/OpenSCAD.app/Contents/MacOS/OpenSCAD -o "$name".stl generator.scad # Check for errors if [ $? -ne 0 ]; then echo "Error generating STL file for $name" exit 1 fi done < names.txt
内容的提问来源于stack exchange,提问作者AI Noob Coder
相关产品推荐
相关产品推荐

