[解決済み】bashのheredocの中で変数を使用する。
2022-04-04 05:15:16
質問
bashのheredocの中で変数を補間しようとしています。
var=$1
sudo tee "/path/to/outfile" > /dev/null << "EOF"
Some text that contains my $var
EOF
これは期待通りに動いていませんね(
$var
は展開されず、文字通りに扱われます)。
を使用する必要があります。
sudo tee
というのも、ファイルを作成するにはsudoが必要だからです。 みたいなことをする。
sudo cat > /path/to/outfile <<EOT
my text...
EOT
うまくいきません、なぜなら
>outfile
は、sudo を使用していない現在のシェルでファイルを開きます。
解決方法は?
最初の質問に対する答えですが、デリミターを引用符で囲んでいるため、パラメータの置換は行われません。 bashのマニュアルには :
<ブロッククオートヒアドキュメントのフォーマットは
<<[-]word
here-document
delimiter
パラメータ展開、コマンド置換、算術展開、および パス名展開が行われるのは ワード . の中に文字がある場合 単語 は が引用された場合 デリミタ はワードで引用符を削除した結果であり、また の行は展開されない。 もし ワード が引用されていない場合、すべての の行は、パラメータ展開、コマンド置換、算術展開の対象となる。[...]
最初の例を変更して
<<EOF
の代わりに
<< "EOF"
をクリックすると、うまくいくことがわかります。
2番目の例では、シェルは
sudo
のみで、パラメータ
cat
の出力に適用され、リダイレクションは
sudo cat
を元のユーザーとして使用します。 試してみるとうまくいきますよ。
sudo sh -c "cat > /path/to/outfile" <<EOT
my text...
EOT
関連
-
[解決済み】 '\r': コマンドが見つかりません - .bashrc / .bash_profile [重複].
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Bash prints リテラルの改行をエコーする \n
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで変数が設定されているかどうかを確認する方法は?
-
[解決済み] Bashスクリプトでファイルへのheredocを書き込むには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】bashでjsonファイルを解析するために、jqの出力にあるダブルクオートを削除する方法は?
-
[解決済み】if [](角括弧)の「[: 引数が多すぎる」エラーの意味)
-
[解決済み】ZIPエラー - 何もできない
-
[解決済み] MacOSのbashターミナルでexport PS1="\u[\033[m]@[\033[32m]\h:\[\033[33;1m]\w[\033[m]\$" は何を意味していますか?
-
[解決済み] Docker ubuntu イメージ - bash: man: コマンドが見つかりません。
-
[解決済み] Homebrewは最新ですが、`could not link` + `delete path` のエラーは気にしなくていいのでしょうか?
-
[解決済み] 値がベースに対して大きすぎる(エラートークンは "08")[重複]
-
[解決済み] zip警告 - 名前が一致しない
-
[解決済み] 絶対パスと論理パスの違い
-
[解決済み] Bashスクリプトの'''抜け'''がある] [クローズド]