concat () (
IFS=''
printf '%s\n' "$*"
)
Эта функция использует"$*"
(двойные кавычки важны ),который будет расширяться до одной строки со значениями позиционных параметров (аргументов ), объединенных со значением первого символа $IFS
в качестве разделителя.
Мы устанавливаем IFS
на пустую строку, что означает, что "$*"
будет расширяться на все аргументы, объединенные без разделителя.
Также обратите внимание, что мы защищаем остальную часть сценария оболочки от принятия измененного значения $IFS
, заключая его в подоболочку (... )
вместо обычного {... }
.
Вызов этой функции в другой функции может выглядеть как
other_func () {
printf '%s\n' "$( concat "$@" )"
}
или короче, без фактического вызова функции concat
:
other_func () {
( IFS=''; printf '%s\n' "$*" )
}
Чтобы удалить все пробелы в списке аргументов, используйте
printf '%s\n' "$*" | tr -d ' '
например,
concat_delete_sp () {
printf '%s\n' "$*" | tr -d ' '
}
Тестирование:
$ concat 1 2 3 "h h h" o o o
123h h hooo
$ concat_delete_sp 1 2 3 "h h h" o o o
123hhhooo
Одним из вариантов является настройка Ansible[1] для синхронизации этих файлов между главным и узлами . В последнее время я изучаю Ansible , поэтому я просто применяю то, чему научился.
Скажем, у вас есть мастер и узел _1 ... узел _n и мастер имеет последнюю версию файлы.
Конечно, вам потребуется установить Ansible на ваш мастер , а также иметь возможность подключаться к узлам по ssh через мастер .
Сначала создайте файл hosts, например ansible _hosts вот так :[используя многоточие, чтобы обозначить, что вы можете добавить столько узлов, сколько хотите, и используйте свои собственные имена хостов]
[sync_nodes]
node_1.example.local
node_2.example.local
...
Затем создайте файл с именем, например sync _pw.yml , например:
---
- hosts: sync_nodes
tasks:
- name: Copy file from master to {{ item }}
include_tasks: copy_tasks.yml
with_items:
- "{{ groups['sync_nodes'] }}"
Затем в копии _tasks.yml:
---
- name: Copy /etc/passwd
copy: src=/etc/passwd dest=/etc/passwd
- name: Copy /etc/passwd
copy: src=/etc/group dest=/etc/groups
, затем в командной строке:
ansible-playbook -i ansible_hosts./sync_pw.yml
Принять к сведению: