Еще один ответ, основанный на практическом опыте.
Я бы использовал один -лайнер, если бы это был «выбрасываемый» код, который я мог бы написать прямо в командной строке. Например, я мог бы использовать это:
for h in host1 host2 host3; do printf "%s\t%s\n" "$h" "$(ssh "$h" uptime)"; done
Я бы воспользовался скриптом, если бы решил, что код стоит сохранить. На этом этапе я бы добавил описание вверху файла, возможно, добавил проверку ошибок и, возможно, даже проверил бы его в репозитории кода для проверки версий. Например, если бы я решил, что проверка времени безотказной работы набора серверов — это полезная функция, которую я буду использовать снова и снова, одну строку -выше можно было бы расширить до этой:
#!/bin/bash
# Check the uptime for each of the known set of hosts
########################################################################
#
hosts=(host1 host2 host3)
for h in "${hosts[@]}"
do
printf "%s\t" "$h"
uptime=$(ssh -o ConnectTimeout=5 -n "$h" uptime 2>/dev/null)
printf "%s\n" "${uptime:-(unreachable)}"
done
Обобщая, можно сказать
Один -вкладыш
Скрипт
cron
)Я вижу довольно много вопросов здесь по unix.SE просят один -лайнер для выполнения конкретной задачи. Используя мои примеры выше, я думаю, что второй гораздо более понятен, чем первый, и поэтому читатели могут узнать из него больше. Одно решение может быть легко получено из другого, поэтому в интересах удобочитаемости (для будущих читателей )нам, вероятно, следует избегать предоставления кода, втиснутого в одну строку для чего-либо, кроме самых тривиальных решений.
У меня такая же проблема. Моим обходным решением было временное понижение версии qemu -пользователя -статического изображения:
docker run --rm --privileged multiarch/qemu-user-static:5.0.0-2 --reset -p yes