より良いバージョンを探していますset -e
。よりよい版はきちんと働く™。私は簡単に読んだバッシュFAQ/105そして試したこのクレイジーなアプローチしかし、エラーが原因で失敗する方法はまだわかりません。
私のユースケースは、次のテンプレートからテキストファイルを生成したいことです。
#!/usr/bin/env bash
# none of these options helped to get the behavior I want: stop on first error
# set -euo pipefail
# shopt -s inherit_errexit
# set -o errexit
# trap ERR
cat <<< "
MYAPP_DATABASE_PASSWORD=$(pwgen -1 32)
MYAPP_USER_PASSWORD=$(pwgen -1 8)
MYAPP_CONFIGURATION_DATE=$(date --utc --iso-8601=ns)
"
または、この方法同意することもできます(template.txt
テキストファイルを含む)。ここにある文字列上から):
#!/usr/bin/env bash
# none of these options helped to get the behavior I want: stop on first error
# set -euo pipefail
# shopt -s inherit_errexit
# set -o errexit
# trap ERR
while read line; do
[ -z "$line" ] || echo "# $line"
cmd="echo $line"
outline=$(eval $cmd)
exitstatus=$?
echo "$outline"
echo "# exit status was $exitstatus"
done < "template.txt"
pwgen
残念ながら、次の要件のため、上記のアプローチのどれも私には適していません。コマンドの置き換えが失敗した場合(たとえば、見つからないため)、すべてがクラッシュしたいと思います。 1つ以上のエラーがあってはいけません。
他の技術では、所望の動作がデフォルト値である。
# this is an erb file
<%
require 'securerandom'
require 'date'
%>
MYAPP_DATABASE_PASSWORD=<%= SecureRandom.alphanumeric(32) %>
MYAPP_USER_PASSWORD=<%= SecureRandom.alphanumeric(8) %>
MYAPP_CONFIGURATION_DATE=<%= DateTime.now.new_offset.iso8601(6) %>
スペルエラーがある場合はSecureRandom
すぐに終了しerb
て失敗します。
Bashを使用して、これらの障害が発生した場合の競合動作をどのように達成できますか?
ベストアンサー1
別のオプションは、次の構成ツールを使用することです。アンシプールこれにより jinja2 を使用できます。金型、生成されたファイルを使用するアプリケーションに一種の構成確認がある場合は、生成されたファイルを確認することもできます。
- name: Update sshd configuration safely, avoid locking yourself out
template:
src: etc/ssh/sshd_config.j2
dest: /etc/ssh/sshd_config
owner: root
group: root
mode: '0600'
validate: /usr/sbin/sshd -t -f %s
backup: yes