Как выводить текст и выводить команды из команды параллельно в файл - PullRequest
0 голосов
/ 11 октября 2010

Я хотел бы повторить текст, а также удаленно пропинговать компьютер и отправить вывод в файл журнала.Мне также нужно сделать это параллельно, но у меня возникли некоторые проблемы с тем, как вывод отправляется в файл журнала.

Я бы хотел, чтобы вывод выглядел следующим образом: host |hostTo |результат команды ping

, но поскольку он работает как фоновый процесс, он выводит: host hostTo host hostTo rtt rtt rtt etc ...

Есть ли способ разрешить этофоновый процесс, но сделайте так, чтобы эхо было частью этого процесса, чтобы лог-файл не вышел из строя?

вот мой сценарий, заранее спасибо!

 for host in `cat data/ips.txt`; do 
 echo -n "$host ";
 for hostTo in `cat data/ips.txt`; do
 {
     echo -n "$host $hostTo " >> logs/$host.log;
    (ssh -n -o StrictHostKeyChecking=no -o ConnectTimeout=1 -T username@$host ping -c 10 $hostTo | tail -1 >> logs/$host.log) &

 };
done; 
done

1 Ответ

2 голосов
/ 11 октября 2010

Это можно сделать с помощью awk. В основном вы спрашиваете, как распечатать хосты и результат одновременно.

есть. Удалите строку с эхо и измените следующее:

ssh .... ping -c 10 $hostTo | awk -v from=$host -v to=$hostTo 'END {print from, to, $0}' >> logs/${host}.log

Обратите внимание, что tail эффективно выполняется и внутри awk. Включение shell var в awk, как правило, является PITA, возможно, есть более простой способ сделать это без экранирования и кавычек. [Обновлено: назначить переменную в awk]

PS. Название вашего вопроса немного неясно, оно звучит так, как будто вы хотите одновременно передать вывод своей программы на дисплей и в файл.

...