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

如何循环顺序执行自定义命令?解决rnxEditGde.py路径报错问题

问题解决:循环脚本文件路径错误与命令批量执行修复

问题背景

现有3个变量文件(ionex_list、receiver_ids、data_record)各含9条对应数据,示例如下:

# ionex_list 与 data_record 对应示例
jplg0910.19i.Z         ISTA00TUR_R_20190910000_01D_30S_MO.crx.gz 
jplg0920.19i.Z         ISTA00TUR_R_20190920000_01D_30S_MO.crx.gz
...
jplg0980.19i.Z         ISTA00TUR_R_20190980000_01D_30S_MO.crx.gz
jplg0990.19i.Z         ISTA00TUR_R_20190990000_01D_30S_MO.crx.gz

编写循环脚本后执行rnxEditGde.py时出现报错:File: "/y2019/d091" does not exist,无法正确定位当前工作目录多级子目录下的.gz文件,导致后续命令无法验证运行状态。原脚本存在路径拼接错误、变量读取逻辑错误、冗余符号干扰等问题。

核心问题分析

  1. 冗余符号干扰路径解析:脚本中变量前后的**会被当作路径的一部分,导致文件路径无效
  2. 行号读取逻辑错误:循环变量j是日期后缀(091-099),但用sed -n "$j p"读取变量文件时,会尝试读取第91-99行,而变量文件仅9行,导致变量值为空或错误
  3. 路径拼接错误:使用绝对路径/y2019/d${j}但实际文件位于当前工作目录的子目录下,未结合当前路径拼接

修复方案与修正脚本

修复步骤

  • 移除变量引用时的冗余**符号
  • 修正循环行号逻辑:用循环索引(1-9)读取变量文件的对应行,而非日期后缀值
  • 正确拼接文件路径:结合当前工作目录路径,生成有效的相对/绝对路径
  • 添加命令执行校验:确保前序命令执行成功后再运行后续命令

修正后的完整脚本

#!/bin/bash
set -e  # 命令执行失败时立即退出,避免无效循环

dir=$(pwd)
# 读取指定行的函数,参数1为行号,参数2为文件名
pl() {                
  sed -n "$1p" "$2"
}

# 循环索引1-9,对应9条数据
for idx in {1..9}; do
  # 从变量文件读取对应行的内容
  ids=$(pl "$idx" receiver_ids)
  ionex=$(pl "$idx" ionex_list)
  dataRecordFile=$(pl "$idx" data_record)
  
  # 提取日期后缀(如091、092...),从ionex文件名截取:jplg0910.19i.Z → 091
  j=$(echo "$ionex" | cut -c4-6)
  
  # 1. 生成树结构文件
  gd2e.py -mkTreeS Trees
  # 2. 替换ionex文件名到配置树
  sed -i "s/jplg.*/$ionex/g" "$dir/Trees/ppp_0.tree"
  # 3. 处理数据记录文件,使用当前目录拼接正确路径
  data_file_path="${dir}/y2019/d${j}/${dataRecordFile}"
  rnxEditGde.py -dataFile "$data_file_path" -o dataRecordFile.Orig.gz
  
  # 4. 执行gd2e主命令,确保变量引用无冗余符号
  gd2e.py \
    -treeSequenceDir Trees \
    -drEditedFile "$dataRecordFile" \
    -antexFile goa-var/etc/antennaCalsGNSS/igs14_2038.atx  \
    -GNSS https://sideshow.jpl.nasa.gov/pub/JPL_GNSS_Products/MultiGNSS_Rapid_Test \
    -runType PPP \
    -recList "$ids" \
    -staDb /goa-var/sta_info/sta_db_qlflinn  \
    >gd2e_"${j}".log 2>gd2e_"${j}".err 
done

额外优化说明

  • 添加set -e确保命令执行失败时终止循环,避免无效执行
  • 日志文件添加日期后缀(gd2e_091.log),方便区分每次循环的运行日志
  • 从ionex文件名自动提取日期后缀j,避免手动维护循环变量与数据的对应关系,减少出错概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:40:46