Выполнение bash внутри подоболочек

В моем тестировании ansible-playbook --syntax-checkправильно установил код выхода на основании синтаксических ошибок в playbook. Вы можете поверить мне на слово, что хороший -пример и плохой -пример плейбуков ведут себя так, как указано.

Хороший файл:

$ ansible-playbook --syntax-check good-example.yaml
 [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match
'all'


playbook: good-example.yaml
$ echo $?
0

... и битый файл:

$ ansible-playbook --syntax-check bad-example.yaml
 [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match
'all'

ERROR! 'xhosts' is not a valid attribute for a Play

The error appears to have been in '/.../bad-example.yaml': line 2, column 3, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

---
- xhosts: all
  ^ here

$ echo $?
4

Итак, я считаю, что вы могли бы выполнить проверку синтаксиса -так, как вы предлагаете:

ansible-playbook --syntax-check example.yml && ansible-playbook example.yml

... хотя может быть спокойнее отказаться от вывода из части проверки синтаксиса:

ansible-playbook --syntax-check example.yml >/dev/null 2>&1 && ansible-playbook example.yml

Примечание:Вы можете обернуть все это в функцию, чтобы не печатать:

safe-ansible() {
  ansible-playbook --syntax-check "$@" > /dev/null 2>&1 &&
  ansible-playbook "$@"
}

1
14.03.2021, 00:15
1 ответ

Вам нужно будет создать сценарий и вызвать эту оболочку, вызывающую ваш сценарий в качестве параметра. Например:

$ echo "echo hi" > my_echo.subshell
$ echo "enter-subshell -c my_echo.subshell" > my_script.bash
$./my_script.bash

Способ передачи параметров в подоболочку (в моем примере "-c" )будет зависеть от вашей подоболочки, каждая оболочка может использовать разные параметры.

В качестве альтернативы, если вы не хотите создавать второй сценарий, вы также можете перенаправить инструкции в оболочку. Это также будет варьироваться и зависеть от оболочки, которую вы хотите вызвать. Например:

enter-subshell -e <<EOF
echo hi
EOF

Подробнее об этом методе можно прочитать в «Здесь документы ». Опять же, вы найдете правильный способ выполнения конкретной подоболочки (в моем примере "-e" ).

0
18.03.2021, 22:26

Теги

Похожие вопросы