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

Shell脚本执行后残留空Vim窗口,求自动关闭的脚本修改方案

问题描述

我需要完成两项任务:

  • 创建总计170个输入文件,均命名为“STEP0.sh”,每个文件包含唯一的目录和文件编号(000~169);
  • 文件创建修改完成后,将其复制到与文件名(不含扩展名)同名的文件夹中,复制后删除原文件以创建新的“STEP0.sh”。

我编写的脚本如下:

source pSTEP0.sh

for file in ${NAME}_*;do
    vim STEP0.sh;
    echo 'DIR='"\"$DIR/${file}\"" >> STEP0.sh;
    echo 'IN='"\"${file}.vcf\"" >> STEP0.sh;
    echo 'NAME='"\"${file}\"" >> STEP0.sh;
    cp STEP0.sh ./${file};
    rm STEP0.sh;
done;
exit

其中源文件pSTEP0.sh内容为:

DIR="/sc/arion/projects/Itan_lab/minju/annotations/gnomAD/split"
NAME="gnomAD"

脚本可成功生成目标文件,但执行完毕后残留大量空Vim窗口,需手动输入:wq多次关闭。请问如何修改脚本实现自动关闭这些窗口?

解决方案

你不需要调用vim来创建文件——vim是交互式编辑器,每次执行都会打开窗口等待手动操作,这就是残留窗口的根源。直接用文件重定向语法就能完成内容写入,完全无需启动Vim。

修改后的脚本如下:

source pSTEP0.sh

for file in ${NAME}_*;do
    # 使用Here Document批量写入内容,覆盖创建STEP0.sh
    cat > STEP0.sh <<EOF
DIR="$DIR/${file}"
IN="${file}.vcf"
NAME="${file}"
EOF
    cp STEP0.sh ./${file}/
    rm STEP0.sh
done
exit

核心修改说明:

  • 移除vim STEP0.sh行,彻底避免启动交互式编辑器
  • 采用Here Document(<<EOF)语法批量写入配置内容,比多次echo更简洁易读,且格式更清晰
  • 给cp的目标路径加上斜杠./${file}/,明确指定是文件夹路径,避免潜在的路径歧义

修改后脚本会自动完成所有文件创建、写入和复制操作,不会再弹出任何Vim窗口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:55:23