Кажется, нет необходимости задействовать sed (или любую другую утилиту), поскольку Bash может сделать это сам:
Теперь я отмечаю, что мне достаточно сделать: \
и затем в открывшемся «приглашении продолжения строки» я мог просто вставить свой скрипт, и он запустился. Например:
\
> Paste your script here (with #!/bin/bash) and it would run directly.
Вы можете запустить скрипт без обратной косой черты () и просто набрав скрипт внутри, но в случае, если у вас есть примечание скрипта (#) в начале, которое вы копируете скрипт с - - Вы бы хотели использовать обратную косую черту.
Прочтите комментарии: этот ответ может быть бесполезен в некоторых системах, если ваш скрипт включает комментарии.
Предполагая, что вы просто хотите, чтобы весь вывод выводился в терминал:
#!/bin/bash
hosts_file=/path/to/file
username=youruser
while read -r host; do
hostname=$(ssh "${username}@${host}" hostname)
ip_addr=$(ssh "${username}@${host}" hostname -I)
uptime=$(ssh "${username}@${host}" uptime)
echo
{
echo "Hostname:?$hostname"
echo "IP:?$ip_addr"
echo "uptime:?$uptime"
} | column -s\? -t
echo
done <"$hosts_file"
Это будет перебирать каждую строку вашего файла hosts _, назначая всю строку на host
. Затем он установит hostname
, ip_addr
и uptime
в соответствующие результаты на удаленной машине. Затем он будет отображать эти результаты в формате столбцов.
Попробуйте (, предполагая, что ваши хосты в hostlist
имеют правильную настройку аутентификации)
while read HOST
do { read HN; read IP; read UP; printf "hostname: %s\nIP: %s\nuptime: %s\n" "$HN" "$IP" "$UP"; } <<< "$(ssh $HOST "hostname; hostname -I; uptime")"
done < hostlist