关于 Linux 重定向运算符的问题

关于 Linux 重定向运算符的问题

我正在为 LPIC-1 做准备,<> 重定向运算符让我感到困惑。我知道它的官方定义是“使指定的文件同时用于标准输入和标准输出”……但我仍然感到困惑。

有人可以提供一个关于如何/何时在 Linux 中使用 <> 重定向运算符的例子吗?

答案1

例如,当您需要提供程序输入数据,并将输出数据发送到某处(例如文件)时:

$ sort < data.txt > result.txt

data.txt这将通过 sort 命令运行数据,并将输出发送到result.txt。它与执行此操作相同:

$ sort data.txt > result.txt

可以这样想:

(2 <- 1) -> 3

中间的文件被输入给2号程序,最后将结果发送给3。

答案2

如果 John T 的答案是你想要的,那么你表述错误了问题:)

他简洁地描述了 < 和 > 运算符,但您询问的是 <>。这是一个很少使用的运算符,我不确定是否会在 LPIC-1 中看到它,但只是为了记录一下(因为您现在可能已经完成了该考试):

当您以交互方式运行命令而不进行重定向时,其标准输入、输出和错误通常会附加到 tty;它将从 stdin 读取并写入 stdout/stderr。虽然您可能没有想到,但这些文件描述符通常以读写方式打开。尝试运行类似

#!/bin/bash
echo "I'm writing to stdin!" >&0

运行这个裸机是可行的,至少在当前狂欢版本。但是,当您使用 < 和 > 重定向器时,stdin 和 stdout 文件描述符仅分别打开以进行读取和写入,因此如果您使用从文件重定向的输入调用此方法 -

./write-to-stdin < /tmp/some-input

惯于工作(足够合理)。如果您确实希望使用重定向调用的程序能够写入并写入单个文件描述符,那么 <> 就可以完成这项工作。

./read-and-write-stdin   <> /tmp/some-input-and-output
./read-and-write-stdout 1<> /tmp/some-input-and-output

由于大多数程序仅期望 stdin 作为读取描述符而 stdout 作为写入描述符,因此您可能明白为什么这很少有用,但如果您正在编写从属脚本(或使用函数),您可以自己利用这种行为。

相关内容