我试图了解Shell如何更好地处理重定向。我的理解是语法“ n <”表示重定向由“ n”给出的文件描述符。
我正在努力理解的命令是
echo "first" > test; echo "second" 1< test
我认为将会发生的是文件“ test”将被文本“ first”覆盖;然后,在执行第二个命令时,将1(即stdout)重定向到测试。
实际发生的情况如下:
任何人都可以解释发生了什么吗?是stdout被重定向到测试但处于“只读”模式或类似的状态吗?我找不到在其他地方的脚本中使用1<
的引用(因为要承认,这似乎很奇怪)。
答案 0 :(得分:7)
shell重定向1<foo
使FD 1(也称为stdout,通常是 output 描述符)连接到文件{{ 1}}。
因此,当foo
尝试写入到该只读句柄时,它将失败;在大多数合理的Shell中,这也会向stderr写一条错误消息。
在这种情况下,该代码毫无用处,仅仅是一个错误。您需要有一个程序试图从FD 1中读取数据(也许假设它是到当前终端的连接),以使其有意义。 (也就是说,任何执行此操作的程序本身都是错误的;如果不通过FD 0,则应从echo
上直接的句柄进行读取。)