lau*_*t01 1 bash redirect process-substitution
我想知道如何在此站点https://shapeshed.com/unix-join/ 的示例中使用重定向
这是输入
$ cat wine.txt
White Reisling Germany
Red Riocha Spain
Red Beaunes France
$ cat reviews.txt
Riocha Meh
Beaunes Great!
Reisling Terrible!
Run Code Online (Sandbox Code Playgroud)
这是命令和结果
$ join -1 2 -2 1 <(sort -k 2 wine.txt) <(sort reviews.txt)
Beaunes Red France Great!
Reisling White Germany Terrible!
Riocha Red Spain Meh
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,双重使用 < 不起作用
$ cat file 1
Hello
$ cat file 2
World
Run Code Online (Sandbox Code Playgroud)
我预计
$ cat <file1 <file2
Hello World
Run Code Online (Sandbox Code Playgroud)
但结果是
World
Run Code Online (Sandbox Code Playgroud)
你们有什么想法吗?
<(cmd)是一个过程替代。它与 - 但与 -<用于重定向的字符共享一个字符:
<(cmd)扩展为您可以打开和读取以获取程序输出的文件名。您可以将任意数量的文件名传递给命令。< filename 打开一个文件名作为文件描述符 0。在同一个文件描述符上打开一个新文件会覆盖并关闭前一个。您的进程替换示例只是传递两个单独的文件名:
$ echo join -1 2 -2 1 <(sort -k 2 wine.txt) <(sort reviews.txt)
join -1 2 -2 1 /dev/fd/63 /dev/fd/6
Run Code Online (Sandbox Code Playgroud)
如果您类似地将两个文件名传递给cat,您会得到相同类型的结果:
$ cat file1 file2
Hello
World
Run Code Online (Sandbox Code Playgroud)