bashのヒアドキュメント(cat
Pocket

bashでヒアドキュメントを使ってファイルに書き出す際、変数をそのまま記述すると現在の環境変数を元に展開されてしまう。

blacknon@BS-PUB-UBUNTU-01:~$ env | grep SHELL
SHELL=/bin/bash
blacknon@BS-PUB-UBUNTU-01:~$ cat << EOF > ./test
> SHELL=99999
> TEST=1234
> VAL=$SHELL
> AAA=$TEST
> EOF
blacknon@BS-PUB-UBUNTU-01:~$ cat ./test
SHELL=99999
TEST=1234
VAL=/bin/bash
AAA=
Sponsored Links

これを展開させないようにするには、catでヒアドキュメントとして指定している文字列(今回の例の場合だとEOF)をダブルクォーテーションかシングルクォーテーションで囲ってやればよい。

blacknon@BS-PUB-UBUNTU-01:~$ cat << "EOF" > ./test
> SHELL=99999
> TEST=1234
> VAL=$SHELL
> AAA=$TEST
> EOF
blacknon@BS-PUB-UBUNTU-01:~$ cat ./test
SHELL=99999
TEST=1234
VAL=$SHELL
AAA=$TEST

 

sudoで書き出しをする際は、囲む際にエスケープするか違うクォーテーションを使ってやろう。

blacknon@BS-PUB-UBUNTU-01:~$ sudo sh -c 'cat << "EOF" > /test
SHELL=99999
TEST=1234
VAL=$SHELL
AAA=$TEST
EOF'
blacknon@BS-PUB-UBUNTU-01:~$ ls -la /test
-rw-r--r-- 1 root root 43  8月 21 10:56 /test
blacknon@BS-PUB-UBUNTU-01:~$ cat /test
SHELL=99999
TEST=1234
VAL=$SHELL
AAA=$TEST
Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。