cat - ファイルをリダイレクトしますが、変数拡張を含みます。

cat - ファイルをリダイレクトしますが、変数拡張を含みます。

~/nginx_app次のconfテンプレートを含むファイルがあります。

server {
    root /var/www/html/${domain}/;
    server_name ${domain} www.${domain};
}

このスクリプトもあります。

#!/bin/bash
domain="$1" && test -z ${domain} && return
cat ~/myAddons/nginx_app > /etc/sites-available/${domain}.conf

ご覧のとおり、スクリプトで生成されたコンテンツをリダイレクトしたいと思いますnginx_app${domain}.conf

catこれで、リダイレクトが発生したときにテンプレート内の変数を拡張する必要があります。拡張が実際に発生することをどのように保証しますか?

here-stringについて考えていましたが、文字列を印刷することを知っています。

cat > "etc/nginx/sites-available/${domain}.conf" <<< "source ~/myAddons/nginx_app"

この

cat ~/myAddons/nginx_app > etc/nginx/sites-available/${domain}.conf

修正する

スクリプトを実行した後、最終状態は次のようになります/etc/sites-available/example.com.conf

server {
    root /var/www/html/example.com/;
    server_name example.com www.example.com;
}

ベストアンサー1

あなたが望むのは、基本的には変数拡張ではなく入力ファイルの内容を処理する文字列置換です(シェルは変数を引用するときはそうしますが、入力内容には機能しません)。

これはsedシェル変数を使用して行うことができます。これ発生する可能性のあるすべての質問に答えてください。

#!/bin/sh
test -n "$1" || exit 1
sed 's/\${domain}/'"$1"'/g' input.txt > output_"$1".txt

inputそれに応じて調整してくださいoutput。また、$1位置パラメータを変数にコピーする代わりに直接使用していることに注意してください。

私が提案できるより良いアプローチは、テンプレートとして機能するスクリプトを持ち、スクリプトコマンドラインから位置引数として変数を提供するか、変数ファイルをインポートすることです。特にパターンが複雑になった場合、ファイルをコピーして文字列を置き換えて曲芸を実行するのは最善の方法ではありません。

おすすめ記事