小编Red*_*ect的帖子

了解破折号中的管道和重定向

有人问如何将两个命令的输出作为文件传递给另一个命令,他们得到了下面的答案

( cmd1 | ( cmd2 | ( main_command /dev/fd/3 /dev/fd/4 ) 4<&0 ) 3<&0 )
Run Code Online (Sandbox Code Playgroud)

我需要拆开这个。

假设我有一个文本文件some_file,我希望将它作为输入传递给main_command. main_command将两个文件作为输入。如果我想main_commandsome_file命令的输出一起使用cmd2,一种方法是

( cmd2 | ( main_command some_file /dev/fd/4 ) 4<&0 )
Run Code Online (Sandbox Code Playgroud)
  • 这其中“最深”的部分(即一切达到顶峰的地方)是 main_command some_file /dev/fd/4. 这只是将文件some_file/dev/fd/4作为参数传递 给main_command.
  • 4<&0部分表示stdin将指向文件描述符4
  • cmd2 |将 的输出cmd2与后面任何内容的输入连接起来。
  • 我真的不知道括号的功能是什么。它们的存在仅仅是为了解析目的还是更多?

我的问题是:

  1. 如何解压问题开头的命令?
  2. 括号有什么作用?
  3. 我对简单命令的解释是否正确?

编辑:我应该说如果我的逻辑是正确的,那么就没有必要回答 1。

shell pipe io-redirection file-descriptors posix

2
推荐指数
1
解决办法
546
查看次数

`touch file` 和 `&gt;file` 之间的区别

说有一个空目录,我运行的命令>file1,并touch file2同时在该目录中,但我忘了命令创建的文件。

我不知道我先运行了什么命令,而且我无权访问命令历史记录。

文件未被篡改。有没有办法知道从哪个文件中获得了touch哪些文件是从重定向中获得的?

io-redirection touch

2
推荐指数
1
解决办法
213
查看次数

标签 统计

io-redirection ×2

file-descriptors ×1

pipe ×1

posix ×1

shell ×1

touch ×1