| 这是一个有趣的效果。例如,你可以将内容从一个文件描述符传递到另一个文件描述符: find /etc -iname "*.service" 1> services.txt 2>&1
 这会将 stderr导向到stdout,而stdout通过管道被导向到一个文件中services.txt中。 它再次出现:&发信号通知 Bash1是目标文件描述符。 标准文件描述符的另一个问题是,,当你从一个管道传输到另一个时,你执行此操作的顺序有点违反直觉。例如,按照上面的命令。它看起来像是错误的方式。你也行像这样阅读它:“将输出导向到文件,然后将错误导向到标准输出。” 看起来错误输出会在后面,并且在输出到标准输出(1)已经完成时才发送。 但这不是文件描述符的工作方式。文件描述符不是文件的占位符,而是文件的输入和(或)输出通道。在这种情况下,当你做 1> services.txt时,你的意思是 “打开一个写管道到services.txt并保持打开状态”。1是你要使用的管道的名称,它将保持打开状态直到该行的结尾。 如果你仍然认为这是错误的方法,试试这个: find /etc -iname "*.service" 2>&1 1>services.txt
 并注意它是如何不工作的;注意错误是如何被导向到终端的,而只有非错误的输出(即 stdout)被推送到services.txt。 这是因为 Bash 从左到右处理 find的每个结果。这样想:当 Bash 到达2>&1时,stdout(1)仍然是指向终端的通道。如果find给 Bash 的结果包含一个错误,它将被弹出到2,转移到1,然后留在终端! 然后在命令结束时,Bash 看到你要打开 stdout(1) 作为到services.txt文件的通道。如果没有发生错误,结果将通过通道1进入文件。 相比之下,在: find /etc -iname "*.service" 1>services.txt 2>&1
 1从一开始就指向services.txt,因此任何弹出到2的内容都会导向到1,而1已经指向最终去的位置services.txt,这就是它工作的原因。
 在任何情况下,如上所述 &>都是“标准输出和标准错误”的缩写,即2>&1。 这可能有点多,但不用担心。重新导向文件描述符在 Bash 命令行和脚本中是司空见惯的事。随着本系列的深入,你将了解更多关于文件描述符的知识。 【编辑推荐】 【责任编辑:庞桂玉 TEL:(010)68476606】不要再吐槽了,Linux Mint 官网重新设计了两款Linux桌面中的图形化操作PDF的工具如何使用Linux Cockpit来管理系统性能如何使用'fsck'修复Linux中的文件系统错误Linux 5.0发布,新特性来袭
 点赞 0
 (编辑:南平站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |