STDIN 重定向有哪些实际用途?

STDIN 重定向有哪些实际用途?

我很难想出 STDIN 重定向的单一实际用途。cat < /etc/passwd是 STDIN 重定向的一个示例,但它很愚蠢,就像无用的使用 cat 一样。我已经使用 Linux 15 年了,我想不出有哪一次需要 STDIN 重定向。有人有任何实际例子吗?

答案1

有多种用例,这是其中之一。应用内核补丁:

cd linux-3.16.2 && patch -p1 < patch-3.16.2-3

答案2

哦,你是老​​师......!!!

mysql -uUSERNAME -p < sqlfile.sql 
sort < domain_list.txt > sorted_domain_list.txt

计算文本的字数:

root@debian:/home/mohsen# wc -c << EOF
>     This is a simple lookup program 
>     for good (and bad) restaurants
>     in Cape Town.
> EOF
90

答案3

我假设您具体询问有关使用语法将程序的标准输入重定向到文件的问题。我问这个问题是因为你的问题有点含糊不清。毕竟,也是 重定向的 stdin。cmd < filecmd1 | cmd2cmd2

  1. 当您需要让程序从文件中读取数据时,该程序不接受输入文件名参数。正如您所指出的, 和都是例子cat < filesort < file< 不是必要的,因为你可以说和。 fkraiem 将命令放入文件然后说的示例 是一个很好的示例。cat filesort fileeded parameter_file < commands_file
  2. 当您需要让程序从文件中读取数据时,如果给出输入文件名参数,则程序的行为与读取 stdin 时的行为不同。我知道的一个例子是wc,其中outputs ,但是outputs ,这在脚本中使用起来要困难得多。 IMNSHO,这是 中的一个错误,但它确实存在。wc -l < filenamenumber_of_lineswc -l filenamenumber_of_lines   filenamewc
  3. 当您想对文本文件中的值执行某些操作时:

    同时读取 var1 var2 …
        代码使用变量1,变量2,ETC…
    完成<文件

答案4

您通常需要标准输入重定向,以便将某些文件作为某些命令的输入发送。这种情况主要发生在脚本中,您可以在脚本中将临时结果存储在文件中。根据上下文,可以使用管道(这样就不需要临时文件)或使用标准输入重定向的临时文件(优点是通过退出状态以可移植的方式控制错误更容易)。

现在,某些命令可以接受输入作为参数,在这种情况下,通常不需要标准输入重定向。但有趣的是,根据输入的提供方式可能会有所不同,因此无用的使用cat实际上可能是有用的。我们举个例子:gzip

$ echo foo > text
$ gzip -k text
$ file text.gz
text.gz: gzip compressed data, was "text", last modified: Thu Sep 18 00:38:18 2014, from Unix

这里获取文件的时间戳text。然后,我们不提供text文件名作为参数,而是使用重定向:

$ gzip < text > text.gz
$ file text.gz
text.gz: gzip compressed data, last modified: Thu Sep 18 00:38:18 2014, from Unix

仍然获得相同的时间戳,但原始文件名不再存储在压缩文件中(已was "text"消失)。现在,让我们使用一个管道,似乎没有什么用处cat

$ cat text | gzip > text.gz
$ file text.gz
text.gz: gzip compressed data, last modified: Thu Sep 18 00:43:46 2014, from Unix

这次,时间戳发生了变化:它是执行 gzip 时的日期/时间,而不是文件的时间戳text

因此,根据您想要的内容和命令的类型,您有 3 种不同的解决方案,它们看似相同,但实际上给出的结果略有不同。

注意:另一个例子是lpr打印命令,如果您不希望文件名在打印机队列中泄漏,则可以使用重定向而不是文件名作为参数。

相关内容