Если вы знаете разницу между вашими хостами для разработки и рабочими хостами или если существует простое соглашение об именах (e. г. dev.example.com
против prod.example.com
), это может быть так же просто, как:
for host in $(</home/completelistlistcheck.txt); do
case "$(ssh $host hostname)" in
*dev*)
env="development"
break
;;
*prod*)
env="production"
break
;;
*)
env="non-categorized"
break
;;
esac
echo "$host is a $env host."
done
Если на каждом хосте есть файл, содержимое которого вам нужно проанализировать, используйте cat /path/to/file
вместо hostname
в команде, запускаемой через ssh
.
Вы можете попробовать флаг -c
OPTIONS
-c, --command=command
Pass command to the shell with the -c option.
Что-то вроде
su - "$user" -s /bin/bash -c 'command1;command1;command3;.....'
Или используйте новые строки вместо ;
для разделения команд.
su - "$user" -s /bin/bash -c '
command1
command2
command3
...
'
Просто нужно позаботиться о заключении в кавычки, если вам нужно заключать команды в одинарные кавычки.
Вы можете использовать функции в вашем bash-скрипте вместе с набором текста , чтобы легко добиться этого;
#!/bin/bash
function1 () {
echo "this is function1"
}
function2 () {
echo "this is function2"
}
su -c "$(typeset -f function1); function1" user1
su -c "$(typeset -f function2); function2" user2
exit 0
Поместите любые команды, которые вы хотите запустить, внутрь функции, и соответствующий пользователь будет выполнять все эти команды.
NOTE: you will run the script as root to easily avoid any password issues
sudo su -c./script.sh
Эх. Я новичок в stackexchange. В противном случае это был бы комментарий, а не ответ. У меня нет представителя, чтобы комментировать. Итак, ребята. Полегче со мной! Я рекомендую вам использовать ssh вместо su. И я рекомендую, чтобы пользователь root и резервный -совместно использовали общую первичную группу UNIX.