小编Bor*_*ris的帖子

“cat file | ./binary”和“./binary < file”有什么区别?

我有一个二进制文件(我无法修改),我可以:

./binary < file
Run Code Online (Sandbox Code Playgroud)

我也可以这样做:

./binary << EOF
> "line 1 of file"
> "line 2 of file"
...
> "last line of file"
> EOF
Run Code Online (Sandbox Code Playgroud)

cat file | ./binary
Run Code Online (Sandbox Code Playgroud)

给我一个错误。我不知道为什么它不适用于管道。在所有 3 种情况下,文件的内容都提供给二进制的标准输入(以不同的方式):

  1. bash 读取文件并将其提供给二进制的标准输入
  2. bash 从 stdin 读取行(直到 EOF)并将其提供给二进制的stdin
  3. cat 读取文件行并将其放入标准输出,bash 将它们重定向到二进制文件的标准输入

据我所知,二进制文件不应该注意到这 3 个之间的区别。有人可以解释为什么第三种情况不起作用吗?

BTW:二进制文件给出的错误是:

20170116/125624.689 - U3000011 无法读取脚本文件“”,错误代码“14”。

但我的主要问题是,具有这 3 个选项的任何程序有何不同。

下面是一些进一步的细节:我试图再次strace的 和实际上有一些错误ESPIPE(非法谋取)lseek的 后面EFAULT(地址错误)读取错误信息之前。 …

shell pipe io-redirection

106
推荐指数
4
解决办法
2万
查看次数

标签 统计

io-redirection ×1

pipe ×1

shell ×1