[解決済み] ファイルから読み込んだ文字列の変数をbashに展開させる
2022-11-25 10:29:24
質問
私は、(ファイルから読み込まれた)文字列内の変数をbashに(強制的に)展開させる方法を見つけ出そうとしています。
私は内容で "something.txt" と呼ばれるファイルを持っています。
hello $FOO world
次に
export FOO=42
echo $(cat something.txt)
が返されます。
hello $FOO world
変数がセットされているにもかかわらず、$FOOが展開されませんでした。ファイルを実行しようとするので、ファイルをevalしたりソースにしたりできません(そのままでは実行可能ではありません。)
何かアイデアはありますか?
どのように解決するのですか?
私はこの質問に対する答えと思われるものに行き当たりました。
envsubst
コマンドです。
envsubst < something.txt
例 ファイルsource.txtの変数を置換し、destination.txtに書き込んでさらに処理する場合。
envsubst < "source.txt" > "destination.txt"
あなたのディストロでまだ利用可能でない場合、これは
GNU パッケージにあります。
gettext
.
ロックアライト
- '$' の問題を処理するために小さなラッパースクリプトを書きました。
(ちなみに、envsubstの"feature"は、以下のサイトで説明されています。 https://unix.stackexchange.com/a/294400/7088 で説明されているように、入力の変数の一部だけを展開する機能もありますが、私は例外をエスケープする方がずっと便利だと思います)。 例外をエスケープする方がずっと便利だということに同意します)。
これが私のスクリプトです。
#! /bin/bash
## -*-Shell-Script-*-
CmdName=${0##*/}
Usage="usage: $CmdName runs envsubst, but allows '\$' to keep variables from
being expanded.
With option -sl '\$' keeps the back-slash.
Default is to replace '\$' with '$'
"
if [[ $1 = -h ]] ;then echo -e >&2 "$Usage" ; exit 1 ;fi
if [[ $1 = -sl ]] ;then sl='\' ; shift ;fi
sed 's/\\\$/\${EnVsUbDolR}/g' | EnVsUbDolR=$sl\$ envsubst "$@"
関連
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] テキストファイルから、特定の文字列を含むすべての行を削除するにはどうすればよいですか?
-
[解決済み] Bashで変数で定義された数値の範囲を反復処理するにはどうすればよいですか?
-
[解決済み] Bashでファイルの中身をループする
-
[解決済み] Bashで文字列を小文字に変換する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
deepinv20 linux ファイルのサフィックスを変更する方法は?Linuxでファイルの拡張子を変更する方法
-
Linux Mintシステムでプログラムをアンインストールするには? Linux で不要なアプリケーションをアンインストールするためのヒント
-
Linux MintのデスクトップでNoteをイタリックにすることは可能ですか?
-
LinuxでJenkinsプラグインのインストールが遅い場合の解決策
-
deepin20のデスクトップアイコンのスタイルを変更する方法は?deepinのアイコンテーマを変更するためのヒント
-
ubuntu 12.04 eclipse でプログラム g++ がパスに見つからなかったと報告される。
-
リクエスト・エンティティが大きすぎる問題の解決策
-
[解決済み] libstdc++.so.5: 共有オブジェクトファイルを開くことができない - しかしライブラリはインストールされており最新である
-
[解決済み] Bashシェルスクリプト - フラグをチェックし、その値を取得します。
-
[解決済み] ワイルドカードマッチングに基づいて、現在のフォルダとサブフォルダ内のすべてのファイルを再帰的に検索するにはどうすればよいですか?