小编Lot*_*ney的帖子

为什么 BASH 进程替换不适用于某些命令?

有时,过程替换不会按预期工作。下面是一个例子:

输入:

gcc <(echo 'int main(){return 0;}')
Run Code Online (Sandbox Code Playgroud)

输出:

/dev/fd/63: file not recognized: Illegal seek
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

输入:

但是当与不同的命令一起使用时,它会按预期工作:

grep main <(echo 'int main(){return 0;}')
Run Code Online (Sandbox Code Playgroud)

输出:

int main(){return 0;}
Run Code Online (Sandbox Code Playgroud)

我注意到与其他命令类似的失败(即期望来自进程替换的文件的命令不能使用/dev/fd/63或类似)。这次失败gcc只是最近的一次。是否有一些我应该注意的一般规则来确定进程替换何时会以这种方式失败并且不应该使用?

我在 Ubuntu 12.04 上使用这个 BASH 版本(我也在 arch 和 debian 中看到过这个):
GNU bash,版本 4.3.11(1)-release (i686-pc-linux-gnu)

linux command-line shell bash process-substitution

32
推荐指数
1
解决办法
6423
查看次数

标签 统计

bash ×1

command-line ×1

linux ×1

process-substitution ×1

shell ×1