【问题标题】:How is '<' handled in Unix?'<' 在 Unix 中是如何处理的?
【发布时间】:2023-03-26 18:25:01
【问题描述】:

我在 C 中测试 argv[] 并注意到如果你在 shell 中输入类似的东西

./program.out <

'&lt;' 不是作为参数读取,而是作为其他内容读取,它给了我一个错误:

bash: syntax error near unexpected token `newline'

谁能解释一下这是什么?

【问题讨论】:

  • 你的shell是一个复杂的东西。阅读其文档以了解其工作原理。
  • 你问的是zshell、c-shell还是korn shell?
  • 谷歌:bash 重定向
  • @siguza:我想你的意思是“重定向”而不是|
  • @rici 是的,我的错。

标签: c shell unix io-redirection


【解决方案1】:

&lt;&gt; 是 Bash(以及大多数其他 shell)中众多 redirection 运算符中的两个。它们通过分别将标准输入和标准输出重定向到源/从源来执行操作。当您编写a.out &lt; 时,您的shell 需要在&lt; 之后的文件名,即从中读取标准输入的位置。如果不指定任何内容,您的 shell 会遇到尾随的新行并输出错误。

如果您想将文字“转义它 - a.out '&lt;'a.out \&lt;

延伸阅读:http://www.tldp.org/LDP/abs/html/io-redirection.html

【讨论】:

  • 在一次编程任务中,有人要求我使用系统调用编写 cat 程序,为此我认为我需要缓冲重定向运算符以正确解析命令。你会怎么做。我必须解析 $ ./mycat file2.
  • @daniel:你是在写一个shell还是只是一个shell可以运行的程序?如果您正在编写程序,则忽略重定向;外壳会处理它。您的代码读取标准输入并写入标准输出。如果文件名作为参数给出,则依次打开、读取、关闭每个文件。如果你正在写一个shell,那么就这么说吧。你面临的问题完全不同。
  • 只是写一个程序。
猜你喜欢
  • 1970-01-01
  • 2016-03-31
  • 2011-07-19
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 1970-01-01
  • 2020-03-31
  • 1970-01-01
相关资源
最近更新 更多