我正在编写一个脚本,它可以让用户编辑多个文件。我正在尝试启动vim
每个文件。
我尝试将文件名放入数组中,并迭代数组的每个元素,并在每次迭代中启动 vim。但这仅vim
针对第一个元素启动,并且脚本停止。我怎样才能实现我的目标?
答案1
如果您想在循环内运行交互式内容,则需要使用与标准输入不同的文件描述。
#!/bin/bash
while read -r file <&3; do
vim "$file" || break
done 3< <(find . -type f)
或者,使用空字节分隔符来支持不常见的文件名:
#!/bin/bash
while IFS= read -r -d '' file <&3; do
vim -- "$file" || break
done 3< <(find . -type f -print0)
的输出find
借助进程替换被馈送到文件描述符 3,然后被馈送到read
through <&3
。
/编辑:根据评论中沃尔夫的建议。
答案2
对我来说这有效:
#!/bin/sh
for f in *.txt
do
vim "$f"
done
它为每个文件打开一个 vim,并在关闭前一个文件后打开下一个文件。