vimdiff를 사용하여 cssh 및 sudo를 사용하여 대부분 유사한 호스트 그룹에서 구성 파일을 편집하고 싶습니다.
sudoedit (sudo의 일부)를 사용하면 편집기를 일반 사용자로 사용하여 쓰기 권한이없는 파일을 편집 할 수 있으며 환경 변수를 사용하여 편집기를 지정할 수 있습니다. sudoedit는 파일을 복사하고 사본 이름으로 편집기를 호출하고 편집기가 종료 될 때까지 기다린 다음 수정 된 사본을 원래 위치로 다시 복사합니다. 그래서 편집하지 않는 '편집기'를 만들었습니다. 나중에 사용하고 대기하기 위해 파일을 메모하고 해당 마커를 사용하는 vimdiff 주위 래퍼를 작성하십시오.
첫 번째 파일은 ~ / .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;
}
두 번째는 ~ / .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;
내가 사용하는 방법은 cssh를 사용하여 네 개의 모든 호스트에 대한 연결을 열고 다음과 같은 명령을 사용한 EDITOR=~/.bin/redit sudoedit /etc/conf/file
다음 다른 창에서 실행 ~/.bin/redit1
하고 변경을 저장하고 종료 한 다음 cssh로 다시 전환하고 Enter 키를 눌러 변경 사항을 커밋합니다. sudoedit를 종료하십시오 (두 개 이상의 파일을 편집하는 경우 목록의 다음 파일로 리딧이 진행되고 다음 파일에 대해 redit1을 다시 실행하지 않는 한).
당신이하고있는 일이 덜 복잡하기 때문에 하나의 원격 호스트로 작업하기 때문에 redit1이 필요하지 않으므로 sftp 편집기를 host : .var / redit / host 또는 이와 동등한 것으로 지정할 수 있습니다.
sudo
.