Tim*_*Tim 0 bash process-substitution
是进程替换的用法
command1 <(command2)
Run Code Online (Sandbox Code Playgroud)
相当于
command2 > ~/myfile
command1 ~myfile
Run Code Online (Sandbox Code Playgroud)
?
以上两个可以互相替换吗?
command1
和command2
在命令替换的使用中是否总是同时运行,而在“替换”中command1
仅在command2
运行完成后运行?
如果是,这种差异是否会使两者不等价并且在某些情况下并不总是相互替换?
谢谢。
这是过程替换。
您给出的两种形式的最终结果应该基本相同;不同之处在于
从技术上讲,涉及进程替换的进程之间的 I/O 行为类似于管道,而不是文件。(不过,这很可能是一个实现细节。)
正确编写的程序不应该因为它们同时运行而表现出不同的结果;例如,
tail -n 1 <(seq 1 10000000)
Run Code Online (Sandbox Code Playgroud)
正确显示序列中的最后一个数字,而尝试手动执行此操作
seq 1 10000000 > blah &
tail -n 1 blah
Run Code Online (Sandbox Code Playgroud)
将失败,因为它tail
显示运行时存储的最后一行,它不会等待seq
完成。在这种情况下,您的第二个表单正确等待。
但是,您可以看到外部行为的差异。例如,
head -n 1 <(seq 1 1000000000)
Run Code Online (Sandbox Code Playgroud)
立即完成(甚至seq
,由于管道行为),而
seq 1 1000000000 > blah
head -n 1 blah
Run Code Online (Sandbox Code Playgroud)
需要很长时间才能运行。这种类型的差异可能意味着用另一种形式替换一种形式是不合适的。
归档时间: |
|
查看次数: |
58 次 |
最近记录: |