Eu tive um problema semelhante, pois queria usar o vimdiff para editar arquivos de configuração em um grupo de hosts em grande parte semelhantes, com o cssh e o sudo, e você pode adaptar minha solução ao seu fluxo de trabalho.
sudoedit (parte do sudo) permite usar qualquer editor como um usuário comum para editar um arquivo para o qual você não tem permissão de gravação e você pode especificar o editor com uma variável de ambiente. O sudoedit copia o (s) arquivo (s), invoca o editor com os nomes das cópias e espera que o editor saia, depois copia a cópia modificada de volta para onde estava. então criei um 'editor' que não edita, apenas anota o arquivo para uso posterior e espera e um wrapper em torno do vimdiff que usa esse marcador.
o primeiro arquivo é ~ / .bin / redit
#!/usr/bin/perl -w
use strict;
use warnings;
use Sys::Hostname;
my $file = $ENV{HOME}.'/.var/redit/'.hostname();
sub cmkdir($){
my $_=shift;
mkdir $_ unless -d $_;
}
cmkdir $ENV{HOME}.'/.var/';
cmkdir $ENV{HOME}.'/.var/redit/';
foreach (@ARGV){
my $fh;
open $fh, '>', $file.'na' or warn;
print {$fh} $_;
close $fh;
symlink $_, $file or die;
print;
<STDIN>;
unlink $file or die;
unlink $file.'na' or die;
}
o segundo é ~ / .bin / redit1
#!/usr/bin/perl -w
use strict;
use warnings;
use Sys::Hostname;
my $h=hostname();
@ARGV=qw(host1 host2 host3 host4) unless @ARGV;
print join " ", qw(gvimdiff), $ENV{HOME}.'/.var/redit/'.$h, map {'scp://'.$_.'/.var/redit/'.$_} grep {$_ ne $h} @ARGV;
exec qw(gvimdiff), $ENV{HOME}.'/.var/redit/'.$h, map {'scp://'.$_.'/.var/redit/'.$_} grep {$_ ne $h} @ARGV;
A maneira como eu os uso é usar o cssh para abrir uma conexão com todos os quatro hosts e usar um comando como EDITOR=~/.bin/redit sudoedit /etc/conf/file
e depois Em uma janela diferente, executar ~/.bin/redit1
, fazer minhas alterações, salvar e sair, voltar para cssh e pressione enter para confirmar as alterações e sair do sudoedit (a menos que eu esteja editando mais de um arquivo, caso em que redit avança para o próximo arquivo da lista e você executa redit1 novamente para o próximo arquivo).
Como o que você está fazendo é menos complicado, você não precisa do redit1 devido a trabalhar apenas com um host remoto, basta apontar seu editor sftp no host: .var / redit / host ou equivalente.