我需要编写一个脚本来向程序输入多行输入(psql
).
经过一番谷歌搜索后,我发现以下语法有效:
cat << EOF | psql ---params
BEGIN;
`pg_dump ----something`
update table .... statement ...;
END;
EOF
这正确地构造了多行字符串(来自BEGIN;
to END;
,包含在内)并将其作为输入传递给psql
.
但我不知道它是如何/为什么起作用的,有人可以解释一下吗?
我主要指的是cat << EOF
, 我知道>
输出到文件,>>
附加到文件,<
从文件读取输入。
什么是<<
到底是怎么做的?
有它的手册页吗?
The cat <<EOF
在 Bash 中处理多行文本时,语法非常有用,例如。将多行字符串分配给 shell 变量、文件或管道时。
示例cat <<EOF
Bash 中的语法用法:
1. 将多行字符串赋值给shell变量
$ sql=$(cat <<EOF
SELECT foo, bar FROM db
WHERE foo='baz'
EOF
)
The $sql
变量现在也包含换行符。您可以通过以下方式验证echo -e "$sql"
.
2. 在 Bash 中将多行字符串传递到文件
$ cat <<EOF > print.sh
#!/bin/bash
echo \$PWD
echo $PWD
EOF
The print.sh
文件现在包含:
#!/bin/bash
echo $PWD
echo /home/user
3. 在 Bash 中将多行字符串传递到管道
$ cat <<EOF | grep 'b' | tee b.txt
foo
bar
baz
EOF
The b.txt
文件包含bar
and baz
线。相同的输出被打印到stdout
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)