Плохой отступ и макет вашего скрипта запутывают вопрос, но основной ответ таков:
printf '%s|%s|%s|%s\n' "$(field1)" "$(field2)" "$(field3") "$(field4)"
Рефакторинг в это, и с очисткой отступов и т. д., ваш скрипт становится
#!/bin/bash
host(){
hostname
}
protocol(){
# avoid useless use of cat; get rid of unused parameter
#... do you need sudo here too?
grep Protocol /etc/ssh/sshd_config
}
rootlogin(){
# straighten out massive spaghetti pretzel; remove unused parameter
#... can you avoid sudo cat here?
if sudo cat /etc/ssh/sshd_config |
grep -v "#PermitRootLogin yes" |
grep -i -q "PermitRootLogin yes"
then
# Fix quoting
echo "$host"
else
echo "Root Access Denied"
fi
}
printf '%s|%s|%s|%s\n' "$1" "$(host)" "$(protocol)" "$(rootlogin)" >fonk.out
Последняя строка несколько умозрительна; ваш текущий скрипт, похоже, вообще не печатает первое поле, и неясно, что оно должно содержать.
Здесь больше не используется временный файл, но одним из антишаблонов в вашей попытке было создание временного файла в несвязанной функции. Когда вам действительно нужен временный файл, вероятно, было бы неплохо создать его отдельно, а затем использовать его как параметр везде. Нравится
tmp=$(mktemp) || exit
# arrange for temp file to be removed in case of errors or signals, too
trap 'rm -f "$tmp"' EXIT
trap 'exit' ERROR HUP QUIT TRAP TERM
function1 "$tmp"
function2 "$tmp"
: etc
Скажем, у нас есть serverA
, serverB
и serverC
в нашем инвентаре. Им нужны новые IP-адреса.
Итак, первый шаг — создать файл в вашем каталоге host_vars
с именем вашего сервера и записать в него новый IP-адрес в качестве переменной.
Пример с файломhost_vars/serverA
:
new_ip: 10.1.0.27
Сделайте то же самое для serverB
и serverC
с соответствующими адресами. Вы также можете расширить это до имен сетевых интерфейсов, если это необходимо.
Затем создайте книгу воспроизведения, в которой используются ранее определенные переменные. Модуль ip
, показанный в этой команде, не существует, здесь я только демонстрирую использование переменной. См. документацию Ansible , если есть модуль, соответствующий вашим потребностям, в противном случае используйте command
/shell
.
- name: Change IP
hosts: serverA serverB serverC
become: yes
tasks:
- name: Set new IP adress
ip: "{{ new_ip }}"
interface: eth0
Кроме того, будьте готовы к потере связи с ansible
. Этот вопрос от SO показывает, как справиться с этим и сохранить соединение.