You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenSCAD Shell脚本批量导出异常:文件无名称且报变量忽略警告

问题分析与解决方法

核心问题

你的问题出在OpenSCAD代码与Shell脚本的参数传递逻辑不匹配:

  1. OpenSCAD里的name = read_string();是从**标准输入(stdin)**读取内容,而非读取命令行通过-D传递的变量,导致你通过-D name="$name"传的名称完全没生效。
  2. 非交互模式下运行OpenSCAD时,read_string()会等待输入但没有获取到内容,所以生成的文件无名称。
  3. 警告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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 04:17:15