让我们定义一个函数来执行二进制文件:
function execute() { ./binary; }
Run Code Online (Sandbox Code Playgroud)
然后定义第二个函数将文本文件通过管道传输到第一个函数:
function test() { cat in.txt | execute; }
Run Code Online (Sandbox Code Playgroud)
如果因段错误而binary
崩溃,test
则从 CLI调用将导致139
返回代码,但错误 - “分段错误” - 不会打印到终端。
如果我们定义直接test
调用,则会打印“分段错误” binary
:
function test() { cat in.txt | ./binary; }
Run Code Online (Sandbox Code Playgroud)
如果我们定义在execute
不通过管道输入标准输入的情况下调用它,它也会被打印出来:
function test() { execute; }
Run Code Online (Sandbox Code Playgroud)
最后,它也得到如果我们重定向打印in.txt
到execute
通过管道,而不是直接的:
function test() { execute <in.txt; }
Run Code Online (Sandbox Code Playgroud)
这是在 Bash 4.4 上测试的。这是为什么?
我有以下简单命令:
$ echo <(vipe)
Run Code Online (Sandbox Code Playgroud)
我希望它打开一个 vim 缓冲区,我可以对其进行编辑,然后当我完成后,回显分配用于保存 vim 缓冲区内容的临时文件的名称。
相反,vim 缓冲区的行为非常奇怪,不响应某些按键,最终 vim 完全崩溃。
我的哪个假设是错误的?