Чтобы выйти из файла bashrc
, когда сеанс оболочки, который его получает, не интерактивен, вы можете выполнить следующее вверху (или в удобном месте) файла:
case "$-" in
*i*) ;;
*) return ;;
esac
Значение в $-
представляет собой строку букв, обозначающую текущие установленные параметры оболочки.Если в строке присутствует символ i
, оболочка является интерактивной.
Это может быть необходимо, поскольку, как указал terdon в комментариях, Bash рассматривает сеансы оболочки, запускаемые sshd
, демоном SSH, как особый случай.
Подробности: Почему bashrc проверяет, является ли текущая оболочка интерактивной?
Далее в файле вы можете проверить, доступна ли оболочка fish
и запустить ее:
if command -v fish 2>/dev/null; then
exec fish
fi
Имейте в виду, что fish
может быть игрой "Go Fish" на некоторых системах :-)
Об использовании команды -v
: Почему бы не использовать "what"? Что тогда использовать?
Вы должны разделить свои hosts:
и другие декларации на разные пьесы. Код должен выглядеть примерно так:
- name: Create front cluster
become: yes
hosts: front
roles:
- deploy_front
- name: Create db cluster
become: yes
remote_user: different-db-user
hosts: db
roles:
- deploy_db
Причина, по которой вы получаете сообщение о дублирующемся ключе, связана со структурой YAML.
Сборник пьес представляет собой набор пьес в виде упорядоченного списка. Каждая игра определяется серией пар ключ/значение. Общие ключевые слова play : :name
, hosts
, become
и roles
, и это лишь некоторые из них.
В YAML для указания различных элементов в списке используется символ тире (-
). В обоих ваших примерах playbook.xml
плейбуков у вас есть только один левый -самый тире символ. Это означает, что у вас есть только один список элементов для playbook или один playbook.
Если вы добавите символ тире перед вторым объявлением hosts
во втором примере playbook.yml
, у вас будет действующая книга воспроизведения, которая теперь содержит две пьесы:
- name: Create cluster
become: yes
hosts: front
roles:
- deploy_front
- hosts: db
roles:
- deploy_db
В исходном втором примере определено только одно воспроизведение. Более того, и ключевое слово hosts
, и ключевое слово roles
определены дважды в этой игре. YAML жалуется, что у вас есть два разных определения для ключевых слов hosts
и roles
.