【发布时间】:2011-01-30 19:43:51
【问题描述】:
我需要编写一个脚本来在程序中输入多行输入 (psql)。
经过一番谷歌搜索,我发现以下语法有效:
cat << EOF | psql ---params
BEGIN;
`pg_dump ----something`
update table .... statement ...;
END;
EOF
这会正确构造多行字符串(从BEGIN; 到END;,包括在内)并将其作为输入传递给psql。
但我不知道它是如何/为什么起作用的,有人可以解释一下吗?
我主要指的是cat << EOF,我知道> 输出到文件,>> 附加到文件,< 从文件中读取输入。
<< 到底是做什么的?
还有手册页吗?
【问题讨论】:
-
这可能是
cat的无用用法。试试psql ... << EOF ...另见“这里的字符串”。 mywiki.wooledge.org/BashGuide/InputAndOutput?#Here_Strings -
我很惊讶它适用于 cat 但不适用于 echo。 cat 应该期望文件名作为标准输入,而不是 char 字符串。 psql
-
回答我自己:不带参数的 cat 执行并复制到输出,无论通过输入(stdin)发送什么,因此使用它的输出通过 > 填充文件。事实上,作为参数读取的文件名不是标准输入流。
-
@Alex echo 只打印它的命令行参数,而
cat读取标准输入(当管道传输到它时)或读取与其命令行参数对应的文件
标签: linux bash scripting heredoc