私はユーザーが複数のファイルを編集できるスクリプトを作成しています。各ファイルを起動しようとしています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
ます<&3
。
/編集:コメントでWolfeの提案に基づいています。
答え2
私にとってこれはうまくいきます:
#!/bin/sh
for f in *.txt
do
vim "$f"
done
各ファイルに対してvimを開き、前のファイルを閉じてから、次のファイルを開きます。