我需要编写脚本以将多行输入输入到程序(psql
)。
经过一番谷歌搜索,我发现以下语法有效:
cat << EOF | psql ---params
BEGIN;
`pg_dump ----something`
update table .... statement ...;
END;
EOF
这样可以正确构造多行字符串(从BEGIN;
to到END;
inclusive),并将其作为输入传递给psql
。
但是我不知道它如何/为什么起作用,请解释一下吗?
我主要是指cat << EOF
,我知道>
输出到文件,>>
追加到文件,<
从文件读取输入。
到底<<
是做什么的?
并且有手册页吗?
这称为 heredoc
格式,以将字符串提供给stdin。有关更多详细信息,请参见https://en.wikipedia.org/wiki/Here_document#Unix_shells。
来自man bash
:
这里文件
这种重定向指示外壳程序从当前源读取输入,直到看到仅包含单词(无尾随空格)的行。
直到该点为止的所有行都将用作命令的标准输入。
此处文档的格式为:
<<[-]word here-document delimiter
没有对 word 执行参数扩展,命令替换,算术扩展或路径名扩展 。如果对 word 中的任何字符加引号,则 定界符 是对
word 删除引号的结果,并且本 文档 中的行不会扩展。如果未引用 word ,则 此文档的 所有行都将
进行参数扩展,命令替换和算术扩展。在后一种情况下,字符序列\<newline>
被忽略,\
必须使用来引用字符\
,$
和```。如果重定向操作符为
<<-
,则从输入行和包含 定界符 的行中删除所有前导制表 符 。这允许外壳脚本中的此处文档以自然方式缩进。
Bash Cat With Cat The classic cat command but with a cat. Perfect as an alias. It fallbacks to the original cat if the command is used with pipes.The delimiters adapt to your terminal size. Take a loo
问题内容: 我想使用以下代码将代码打印到文件中: 但是当我检查文件输出时,我得到了: 我试过用单引号引起来,但是输出中也带有单引号。如何避免这个问题? 问题答案: 您只需要进行最小的更改;在此处单引号此处文档分隔符。 或等效的反斜杠转义: 如您发现的一样,如果不引用,此处的文档将进行变量替换,对反引号进行求值等。 如果需要扩展某些而非全部值,则需要逐个转义要避免的值。 将产生 如@fedorqui
问题内容: 我尝试了一些方法来检测代码中的EOF,但仍然无法正常工作。我尝试使用BufferedReader,Scanner和char u001a标记EOF,但对我的代码仍然没有任何意义。这是我的最后一个代码: 该程序应该在到达EOF时停止运行,但是我不知道为什么,由于某些原因,它会继续运行并导致运行时错误。请帮忙。顺便说一句,我是新来的,如果对我的问题还不清楚,很抱歉,谢谢您:) 问题答案: 由
我尝试了一些方法来检测我的代码中的EOF,但它仍然不起作用。我试过使用BufferedReader、Scanner和使用charu001a来标记EOF,但仍然对我的代码没有任何意义。这里是我的最后一段代码: 程序应该在已经到达EOF时停止,但我不知道为什么,由于某些原因,它继续运行并导致运行时错误。请帮帮忙。顺便说一下,我是新来的,如果我的问题不是很清楚,很抱歉不能理解,谢谢你之前:)
问题内容: 我需要循环直到碰到类似文件的对象的末尾,但是我没有找到“明显的方法”,这使我怀疑自己正在忽略某些东西,很明显。:-) 我有一个流(在这种情况下,它是一个StringIO对象,但我也对一般情况感到好奇)以“ ”格式存储未知数量的记录,例如: 现在,我可以想象的唯一清晰的方法就是使用(我认为是)初始化循环,这似乎有点不符合Python风格: 在类似C的语言中,我只是将其保留在的test子句
问题内容: 我想识别Java套接字 中数据流的结尾 。当我运行下面的代码时,它只是卡住并继续运行(它卡在value上)。 我也希望该程序下载二进制文件,但是最后一个字节始终是不同的,因此我不知道如何(实用地)停止 一会儿 。 感谢您的任何提示。 问题答案: 您应该将现有库用于HTTP。看这里。 您的代码按预期工作。服务器不会关闭连接,并且永远不会变为。发生这种情况是因为默认情况下,连接在HTTP