Попытка удаленно выполнить несколько команд в perl сценарии
Это выглядит так:
$CMD1 = "/usr/sbin/mminfo -av -q \"savetime>'-1 day 18:00:00',savetime<'17:59:59'\" -r \"ssid,totalsize,nfiles,pool\"|grep \"xxxxx\"|/usr/bin/awk '!seen[\$1]++'";
print Dumper $CMD1;
$CMD = "/usr/bin/ssh xxxx\@$SRV \'$CMD1\' 2>&1";
print Dumper $CMD;
Но у меня все еще есть проблема с $ 1 в команде awk, Кажется, он отменяется при запуске.
Что я вижу:
$VAR1 = '/usr/sbin/mminfo -av -q "savetime>\'-1 day 18:00:00\',savetime<\'17:59:59\'" -r "ssid,totalsize,nfiles,pool"|grep "xxxxxx"|/usr/bin/awk \'!seen[$1]++\'';
$VAR1 = '/usr/bin/ssh xxxxx@\'xxxxxx\' \'/usr/sbin/mminfo -av -q "savetime>\'-1 day 18:00:00\',savetime<\'17:59:59\'" -r "ssid,totalsize,nfiles,pool"|grep "xxxxx"|/usr/bin/awk \'!seen[$1]++\'\' 2>&1';
Таким образом, '$ 1' команды awk правильно передается на пульт, но при запуске:
@RESU = `$CMD`;
print Dumper @RESU;
Я вижу, что мои $ 1 отсутствуют (или интерпретируются удаленной оболочкой как нулевое значение):
$VAR1 = 'awk: ligne de commande:1: !seen[]++
';
$VAR2 = 'awk: ligne de commande:1: ^ syntax error
';
$VAR3 = 'awk: ligne de commande:1: error: expression indice non valide
';
Я пробовал много вещей, таких как цитирование или двойные кавычки в строке создание строки с помощью функции perl qq, помещение значения $ CMD1 непосредственно в $ CMD и экранирование кавычек, но никак.
И, конечно, мой awk передается в другой awk (здесь не приводится) ).
Мне не нужно решение, которое запускается awk локально, поскольку я вернул миллионы строк из команды 'mminfo'.
Любая подсказка (или лучший способ сделать это! )?