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

echo >>在Shell脚本中报错文件不存在的问题求助

问题分析与解决方案

核心原因:目标目录不存在

echo >> .var/vc "xxx"无法自动创建文件的根本问题是**.var目录未提前创建**。echo >>仅能自动生成文件,无法递归创建上级目录。终端中你可能手动创建过.var目录,所以命令正常;但脚本首次运行时该目录不存在,导致写入失败。

修复步骤

  1. 提前创建.var目录
    在执行写入操作前,先检查并创建目标目录:

    mkdir -p .var
    

    -p参数会自动生成不存在的上级目录,且目录已存在时不会报错。

  2. 修正echo命令语法
    原写法虽无语法错误,但将重定向放在末尾更规范,避免歧义:

    echo "Don't remove this file please." >> .var/vc
    
  3. 其他脚本优化建议

    • 路径引用添加引号,避免空格或特殊字符引发错误:
      basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
      cd "$basedir"
      ver=$(sed '1!d' "../.version")
      
    • 条件判断改用更直观的匹配方式:
      将if [ h$ff == hy ] || [ h$ff == hY ]; then替换为:
      if [[ $ff =~ ^[Yy]$ ]]; then
      
    • 检查依赖工具wget是否存在,避免脚本意外中断:
      if ! command -v wget &> /dev/null; then
        echo "Error: wget is not installed."
        exit 1
      fi
      

修复后的关键代码片段

#!/bin/bash
NC='\\033[0m' #Reset text color.
P='\\033[0;35m' #Purple
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") #get the base directory of start.sh
cd "$basedir"
ver=$(sed '1!d' "../.version") #get local version

# 确保.var目录存在
mkdir -p .var

if ! [ -f .var/asked ]; then #this is in place so it only asks the below question once, ever.
  if ! [ -f .var/vc ]; then #I don't know why this is here anymore
    echo "Would you like ScratchLang to check its version every time you start it? [Y/N]"
    read -sn 1 ff
    if [[ $ff =~ ^[Yy]$ ]]; then
      echo "Don't remove this file please." >> .var/vc #when start.sh detects this file, it will check for a new version.
    fi
    echo "Don't remove." >> .var/asked
  fi
fi
# 后续代码保持不变...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:40:43