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
相关产品推荐
相关产品推荐

