“ 1 <”有什么作用?

时间:2019-01-17 19:11:16

标签: zsh io-redirection

我试图了解Shell如何更好地处理重定向。我的理解是语法“ n <”表示重定向由“ n”给出的文件描述符。

我正在努力理解的命令是

echo "first" > test; echo "second" 1< test

我认为将会发生的是文件“ test”将被文本“ first”覆盖;然后,在执行第二个命令时,将1(即stdout)重定向到测试。

实际发生的情况如下:

  1. 什么都没有写到终端,所以stdout被重定向到某处;
  2. 当我打开“测试”时,写的是“第一”而不是“第二”,所以我没有覆盖“测试”。

任何人都可以解释发生了什么吗?是stdout被重定向到测试但处于“只读”模式或类似的状态吗?我找不到在其他地方的脚本中使用1<的引用(因为要承认,这似乎很奇怪)。

1 个答案:

答案 0 :(得分:7)

shell重定向1<foo使FD 1(也称为stdout,通常是 output 描述符)连接到文件{{ 1}}。

因此,当foo尝试写入到该只读句柄时,它将失败;在大多数合理的Shell中,这也会向stderr写一条错误消息。

在这种情况下,该代码毫无用处,仅仅是一个错误。您需要有一个程序试图从FD 1中读取数据(也许假设它是到当前终端的连接),以使其有意义。 (也就是说,任何执行此操作的程序本身都是错误的;如果不通过FD 0,则应从echo上直接的句柄进行读取。)