Executa o vim em um loop [closed]

2

Estou escrevendo um script que permitirá ao usuário editar mais de 1 arquivos. Estou tentando lançar vim para cada arquivo.

Eu tentei colocar os nomes de arquivos em uma matriz e interagir com todos os elementos da matriz e lançar o vim em cada iteração. mas isso lança apenas vim para o primeiro elemento e o script para. Como posso alcançar meu objetivo?

    
por Aniket Bhattacharyea 29.05.2016 / 16:10

2 respostas

3

Você precisa usar uma descrição de arquivo diferente de stdin se quiser executar algo interativo dentro do loop.

#!/bin/bash

while read -r file <&3; do

  vim "$file"

done 3< <(find . -type f)

Como alternativa, com separadores de bytes nulos para suportar nomes de arquivos incomuns:

#!/bin/bash

while IFS= read -r -d '' file <&3; do

  vim -- "$file"

done 3< <(find . -type f -print0)

A saída de find é alimentada com a ajuda da substituição de processo para o descritor de arquivo 3, que é então alimentado para read a <&3 .

    
por 29.05.2016 / 16:32
2

Para mim, isso funciona:

#!/bin/sh

for f in *.txt
do
    vim "$f"
done

Abre um vim para cada arquivo e abre o seguinte depois de ter fechado o anterior.

    
por 29.05.2016 / 16:29