私はprintfを使用しましたが、ファイル自体から変数を取得します。 new_fileを変更せずにすべてのコードをコピーしたいです。
printf "${name}_delete()
{
bhyvectl --vm=${name} --destroy
sleep 5
ifconfig ${tap} destroy
sysrc cloned_interfaces-=${tap}
sed -i '' 's/ addm ${tap}//g' /etc/rc.conf
sed -i '' 's/service ${name} start | sleep 5//g' /usr/local/etc/rc.d/bhyve
sed -i '' '/^$/d' /usr/local/etc/rc.d/bhyve
zfs destroy -r zroot/VMs/${name}
rm /usr/local/etc/rc.d/${name}
}\n" >> new_file
答え1
cat
これを行うための最良のツールは、ここで参照されているドキュメントを使用することだと思います。
cat <<'END_SCRIPT' >>new_file
${name}_delete()
{
bhyvectl --vm=${name} --destroy
sleep 5
ifconfig ${tap} destroy
sysrc cloned_interfaces-=${tap}
sed -i '' 's/ addm ${tap}//g' /etc/rc.conf
sed -i '' 's/service ${name} start | sleep 5//g' /usr/local/etc/rc.d/bhyve
sed -i '' '/^$/d' /usr/local/etc/rc.d/bhyve
zfs destroy -r zroot/VMs/${name}
rm /usr/local/etc/rc.d/${name}
}
END_SCRIPT
これは、変数やその他の拡張の値を変更することなく、文書の内容をそのままファイルの末尾に追加しますnew_file
。
END_SCRIPT
これを作成するのは初期区切り記号への参照です。先頭ここで - ドキュメント。文字列END_SCRIPT
は任意ですが、ある程度説明を可能にすることを選択するのが妥当です(説明変数名を選択するのと同じ)。
出力するスクリプトには、引用符のない変数の拡張やその他のエラーが含まれています。以下を修正してください。
cat <<'END_SCRIPT' >>new_file
${name}_delete ()
{
bhyvectl --vm="$name" --destroy
sleep 5
ifconfig "$tap" destroy
sysrc cloned_interfaces-="$tap"
sed -i '' "s/ addm $tap//g" /etc/rc.conf
sed -i '' "s/service $name start | sleep 5//g" /usr/local/etc/rc.d/bhyve
sed -i '' '/^$/d' /usr/local/etc/rc.d/bhyve
zfs destroy -r "zroot/VMs/$name"
rm "/usr/local/etc/rc.d/$name"
}
END_SCRIPT
埋め込みスクリプトが実行されたときに両方の呼び出しで変数の合計を拡張したいとしますtap
。変数名の周りの不要な中括弧を削除し、適切な二重引用符を追加しました。name
sed