プログラムに複数行の入力を行うためのスクリプトを作成する必要がありました ( psql
)。
少しグーグルで検索してみたところ、次の構文が機能することがわかりました。
cat << EOF | psql ---params
BEGIN;
`pg_dump ----something`
update table .... statement ...;
END;
EOF
これにより、複数行の文字列 ( から までBEGIN;
、END;
含む) が正しく構築され、 への入力としてパイプされますpsql
。
しかし、それがどのように/なぜ機能するのか全く分かりません。誰か説明してもらえませんか?
私が主に言及しているのはcat << EOF
、>
ファイルへの出力、>>
ファイルへの追加、<
ファイルからの入力の読み取りです。
具体的に何をするのでしょうか<<
?
それに関するマニュアルページはありますか?
ベストアンサー1
このcat <<EOF
構文は、Bash で複数行のテキストを操作する場合、たとえば、複数行の文字列をシェル変数、ファイル、またはパイプに割り当てる場合に非常に便利です。
cat <<EOF
Bash での構文の使用例:
1. 複数行の文字列をシェル変数に割り当てる
$ sql=$(cat <<EOF
SELECT foo, bar FROM db
WHERE foo='baz'
EOF
)
変数$sql
には改行文字も含まれるようになりました。 を使用して確認できますecho -e "$sql"
。
2. Bashで複数行の文字列をファイルに渡す
$ cat <<EOF > print.sh
#!/bin/bash
echo \$PWD
echo $PWD
EOF
ファイルprint.sh
には次の内容が含まれます:
#!/bin/bash
echo $PWD
echo /home/user
3. Bashで複数行の文字列をパイプに渡す
$ cat <<EOF | grep 'b' | tee b.txt
foo
bar
baz
EOF
ファイルには 行と行がb.txt
含まれています。同じ出力が に印刷されます。bar
baz
stdout