下面的shell重定向是如何工作的?对执行顺序的理解似乎很复杂。有什么简单的解释吗?
uuencode host-file < host-file >encodedfile发布于 2014-04-10 14:18:03
uuencode是命令。host-file是它的论点。< host-file将文件重定向到命令的标准输入。>encodedfile将命令的输出重定向到文件。
发布于 2014-04-10 15:52:16
uuencode host-file < host-file >encodedfile
让我们将其分解为4部分:
uuencode是要运行的命令的名称。shell搜索PATH环境变量($PATH),并在路径中的每个目录中查找名为uuencode的可执行文件。在标准安装中,这将是/usr/bin/uuencode。uuencode程序接受一个二进制文件并将其转换为一种特殊格式的文本,这样就可以通过无法处理非ascii字符的网络发送它。host-file是uuencode的命令行参数。uuencode命令需要一个参数,以便它可以将文件的名称放在编码版本中。编码文件的第一行如下所示:begin 644 host-file< host-file是使用一个名为host-file的文件作为uuencode进程的标准输入(stdin)的shell。因此,当uuencode读取一些字节的输入时,它们不是来自键盘,而是来自该文件。>encodefile是使用名为encodedfile的文件作为标准输出(stdout)的shell。因此,当uuencode写入一些输出,而不是转到屏幕上时,它会转到该文件。没有真正的执行顺序,因为只有一个命令uuencode正在执行。如果你想要技术细节,请继续阅读。
在幕后,shell调用fork(),然后子进程打开host-file文件进行读取,打开encodedfile文件进行写入,并调用exec(),后者将子进程( shell进程的副本)替换为uuencode进程。子进程随后变成uuencode,输入文件描述符(操作系统跟踪打开的文件的方式)设置为host-file,输出文件描述符设置为encodedfile。
https://askubuntu.com/questions/445988
复制相似问题