解释此 shell 重定向:uuencode host-file < host-file >encodedfile

解释此 shell 重定向:uuencode host-file < host-file >encodedfile

下面的 shell 重定向如何工作? 执行顺序似乎很难理解。 有什么简单的解释吗?

uuencode host-file  < host-file >encodedfile

答案1

uuencode是命令。host-file是它的参数。< host-file将文件重定向到命令的标准输入。>encodedfile将命令的输出重定向到文件。

答案2

当启动控制台程序时,它会打开三个标准文件描述符:

0 标准输入
1 标准输出
2 标准错误

通常,STDIN 文件句柄从终端输入(即键盘)读取。但是,当<使用重定向时,输入将从该文件读取。同样,STDOUT 通常写入终端,但是当>使用时,输出将写入该文件。

类似地,可以使用 重定向 STDERR 2>。您可能还会看到使用 将 STDERR 重定向到与 STDOUT 相同的位置2>&1

答案3

uuencode host-file < host-file >encodedfile

我们将其分为 4 个部分:

  1. uuencode是要运行的命令的名称。shell 搜索 PATH 环境变量 ($PATH) 并uuencode在 PATH 中的每个目录中查找可执行文件。在标准安装中,该文件为/usr/bin/uuencode。uuencode 程序获取二进制文件并将其转换为特殊格式的文本,以便可以通过无法处理非 ASCII 字符的网络发送。
  2. 第一个host-file是命令行参数uuencode。该uuencode命令需要一个参数,以便它可以将文件的名称放入编码版本中。编码文件的第一行将如下所示: begin 644 host-file
  3. < host-fileshell 使用名为host-file标准输入 (stdin) 的文件来处理进程uuencode。因此,当uuencode读取一些输入字节时,它们不是来自键盘,而是来自该文件。
  4. >encodefileencodedfile是使用名为标准输出 (stdout) 的文件的 shell 。因此,当uuencode写入某些输出时,它不会转到屏幕上,而是转到该文件。

实际上,执行顺序并不存在,因为只uuencode执行了一个命令。如果您想要技术细节,请继续阅读。

在后台,shell 调用fork(),然后子进程打开host-file文件进行读取,打开encodedfile文件进行写入,然后调用exec(),这会将子进程(shell 进程的副本)替换为 进程uuencode。然后子进程变为uuencode,输入文件描述符(操作系统跟踪打开文件的方式)设置为host-file,输出文件描述符设置为encodedfile

相关内容