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

Mac下Bash脚本无法创建.env文件:只读文件系统报错

解决Bash脚本创建.env时的"Read-only file system"错误

问题根源

你脚本里定义了SCRIPT_DIR变量存储脚本所在目录,但写入文件时误用了未定义的$dir变量,导致系统尝试写入根目录/.env(空变量拼接后路径为/.env),而根目录通常是只读挂载的,因此触发报错。

修复步骤

  1. 修正变量名:将写入路径中的$dir替换为你已定义的$SCRIPT_DIR
  2. 让echo解析换行符:默认echo不会识别\n,需添加-e参数才能生成正确换行的.env内容
  3. 统一路径引用:读取文件时也使用完整路径,避免当前工作目录不一致导致的问题

修复后的完整脚本:

#!/usr/bin/env bash

# 用ip命令替代ifconfig(兼容更多现代Linux发行版)
ip=$(ip addr | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v '127.0.0.1' | head -n1)

SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
echo "脚本所在目录: $SCRIPT_DIR"

# 使用-e解析换行符,并用正确变量指定.env路径
echo -e "REACT_APP_BASE_API=https://$ip:3030/api/\nCOOKIE_TOKEN_KEY=\nREACT_APP_WEB_SOCKET_URL=wss://$ip:3030/one2one" > "$SCRIPT_DIR/.env"

# 读取刚创建的.env文件
cat "$SCRIPT_DIR/.env"

额外优化建议

  • 路径变量加双引号:所有包含路径的变量都用双引号包裹,避免目录名含空格时出现异常
  • 处理多IP场景:如果机器有多个网卡,head -n1会取第一个非本地IP,可根据实际需求调整IP筛选逻辑
  • 兼容macOS:若在macOS运行,可将ip addr换回ifconfig,或安装iproute2mac工具实现兼容

内容的提问来源于stack exchange,提问作者agam theos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:35:03