新しいファイルに変更せずにスクリプトの変数を含む特定の行をコピーする方法

新しいファイルに変更せずにスクリプトの変数を含む特定の行をコピーする方法

私は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。変数名の周りの不要な中括弧を削除し、適切な二重引用符を追加しました。namesed

おすすめ記事