s sh удаленное цитирование выполнения команды и передача awk - PullRequest
0 голосов
/ 29 марта 2020

Я работаю над сценарием, который должен найти определенные диски и добавить к ним имя хоста.

Я использую это для 40 серверов с параметром l oop в bash

#!/bin/bash

for i in myservers{1..40}
    do ssh user@$i findmnt -o SIZE,TARGET -n -l |
            grep '1.8T\|1.6T\|1.7T' | 
            sed 's/^[ \t]*//' |
            cut -d ' ' -f 2 |
            awk -v HOSTNAME=$HOSTNAME '{print HOSTNAME ":" $0}'; done | 
    tee sorted.log

Вы можете помочь с цитированием здесь? Похоже, что awk получает канал (имя хоста) от localhost, а не от удаленного сервера.

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Это более короткая версия вашего материала:

findmnt -o SIZE,TARGET -n -l | 
awk -v HOSTNAME=$HOSTNAME '/M/{print HOSTNAME ":" $2}'

Применимо к вышесказанному:

for i in myservers{1..40}
    do ssh user@$i   bash -c ' 
            findmnt -o SIZE,TARGET -n -l | 
              awk -v HOSTNAME=$HOSTNAME '"'"'/M/{print HOSTNAME ":" $2}'"'"' '
         done | 
    tee sorted.log

см .: Как экранировать символ одинарной кавычки в s sh / remote bash команда?

0 голосов
/ 29 марта 2020

Все после того, как первый канал запущен локально, а не на удаленном сервере.

Попробуйте указать весь конвейер, чтобы он работал на удаленном сервере:

#!/bin/bash

for i in myservers{1..40}
    do ssh user@$i "findmnt -o SIZE,TARGET -n -l | 
        sed 's/^[ \t]*//' |
        cut -d ' ' -f 2 |
        awk -v HOSTNAME=\$HOSTNAME '{print HOSTNAME \":\" \$0}'" ;
done | tee sorted.log
...