Che*_*rma 1 unix shell redirect
假设我有三个文件file1 file2 file3有一些内容现在当我在shell提示符下执行此操作时 cat file1 > file2 >file3
file1的内容被复制到file3,file2变为空
类似的,当我这样做时cat > file1 > file2 > file3
它要求输入,这个输入存储在file3中,file1和file2都是空的
并且cat > file1 > file2 < file3file3的内容也被复制到file2,file1为空.
有人可以向我解释发生了什么我是UNIX的新手.还有任何我可以了解这些重定向运算符的网站.
谢谢
考虑shell在解析命令时如何处理命令的每个部分:
cat file1 > file2 >file3
Run Code Online (Sandbox Code Playgroud)
cat file1:使用cat带参数的程序映像准备一个新进程file1.(给定1个或多个参数,cat将从每个参数读取为文件并写入其输出文件描述符)> file2:更改新进程的输出文件描述符以写入file2而不是当前输出接收器(最初是交互式shell的控制台) - 如有必要,创建`file2.> file3:更改新进程的输出文件描述符以写入file3而不是当前输出接收器(是file2) - file3如有必要,创建End of command:产生新的过程所以最后,file2创建了,但未使用. file3获取数据.
cat > file1 > file2 > file3
Run Code Online (Sandbox Code Playgroud)
cat:cat使用没有参数的程序/图像准备新进程.(没有参数,cat将从其输入文件描述符读取并写入其输出文件描述符)> file1:更改新进程的输出文件描述符以写入file1而不是当前输出接收器(最初是交互式shell的控制台) - file1必要时创建.> file2:更改新进程的输出文件描述符以写入file2而不是当前输出接收器(是file1) - file2如有必要,创建.> file3:更改新进程的输出文件描述符以写入file3而不是当前输出接收器 - 如果需要,file2创建(是)file3End of command:产生新的过程那么,到底,file1和file2创建,但未被使用. file3获取数据.cat等待其输入设备上的输入(控制台设备作为交互式shell的默认设置).cat接收的任何输入都将转到其输出设备(最终file3在shell完成处理命令并调用时cat).
cat > file1 > file2 < file3
Run Code Online (Sandbox Code Playgroud)
cat:cat使用没有参数的程序/图像准备新进程.(没有参数,cat将从其输入文件描述符读取并写入其输出文件描述符)> file1:更改新进程的输出文件描述符以写入file1而不是当前输出接收器(最初是交互式shell的控制台) - file1必要时创建.> file2:更改新进程的输出文件描述符以写入file2而不是当前输出接收器(是file1) - file2如有必要,创建.< file3:更改新进程的输入文件描述符以读取file3而不是当前输入源(最初是交互式shell的控制台)End of command:产生新的过程所以最后,file1创建了,但未使用. file2获取数据.cat等待输入设备上的输入(file3在shell完成处理命令并调用时设置为cat).cat接收的任何输入都将转到其输出设备(最终file2在shell完成处理命令并调用时cat).
-
请注意,在第一个示例中,cat是处理/打开的人file1.shell简单地将单词file1作为参数传递给程序.然而,外壳打开/创建file2和file3. cat什么都不知道,也不知道file3它写入标准输出的东西在哪里.
在其他2个示例中,shell打开了所有文件. cat什么都不知道任何文件. cat不知道它的标准输入来自何处以及它的标准输出将在何处.
Per @Sorpigal评论 - BASH手册对不同重定向运算符的作用有一些很好的描述.其中大部分在不同的Unix shell中都有不同程度的相同,但请参考您的特定shell手册/联机帮助页进行确认.谢谢@Sorpigal.
http://gnu.org/software/bash/manual/html_node/Redirections.html
| 归档时间: |
|
| 查看次数: |
1661 次 |
| 最近记录: |