同様の問題がありました。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;
}
2番目は〜/ .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を使用して4つすべてのホストへの接続を開き、次のようなコマンドを使用してからEDITOR=~/.bin/redit sudoedit /etc/conf/file
、別のウィンドウで実行し~/.bin/redit1
、変更を行い、保存して終了し、csshに切り替えてEnterを押して変更をコミットしますsudoeditを終了します(複数のファイルを編集している場合を除き、reditはリスト内の次のファイルに進み、次のファイルに対してredit1を再度実行します)。
あなたがしていることはそれほど複雑ではないので、1つのリモートホストだけで作業するため、redit1は必要ありません。sftpエディタをhost:.var / redit / hostまたは同等のものに向けることができます。
sudo
ます。