问题标签 [process-substitution]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - 流程替换的惯用用法
我从 Bash 的手册页中学习了 Bash 进程替换。不幸的是,我对该功能的不熟练使用是丑陋的。
熟练的程序员还有其他方法可以做到这一点吗?
如果需要可执行示例,请尝试以下操作:
样本输出:
在我的实际应用中,“一些命令”比较复杂,但上面的示例抓住了问题的本质。
需要进程替换<()
。流程替代的替代方案无济于事。
bash - cat、echo 和进程替换
基本上我想了解这些命令之间的区别:
还有那些命令:
前两个命令的结果完全相同:打印“yolo”,然后终端返回控制权,这正是我所期望的。
[user@localhost ~]$ cat <<< yolo | 三通 f.txt
约洛
[user@localhost ~]$ echo yolo | 三通.txt
约洛
但是使用进程替换,会发生一些奇怪的事情echo
。
[user@localhost ~]$ cat <<< yolo >>(tee f.txt)
约洛
[user@localhost ~]$ echo yolo > >(tee t.txt)
[user@localhost ~]$ yolo
在打印出文本之前,终端会返回控制权。在这种情况下,为什么我能更快地获得控制权?
这一定与如何打开进程以及如何在进程之间传递文件描述符有关,但我有点达到了我的知识极限。
如果我将它通过管道传输到其他任何东西,一切都会恢复正常,例如echo yolo > >(tee t.txt) | cat
.
更奇怪的是 xargs'ing intoecho
效果很好:
[user@localhost ~]$ xargs echo <<< yolo >>(tee t.txt)
约洛
但你可以说这xargs
是这里的主程序,而不是echo
.
如果我使用输入过程替换,cat
我会得到不同的结果:
cat < <(echo yolo) > >(tee t.txt)
有时它给了我这个:
[user@localhost ~]$ cat <<(echo yolo) > >(tee t.txt)
[user@localhost ~]$ yolo
有时是这样的:
[user@localhost ~]$ cat <<(echo yolo) > >(tee t.txt)
约洛
所以我想这可能与系统执行命令的速度有关,这使得它变得不可预测。
这是否意味着输出进程替换(例如tee
在本例中)在后台运行?
bash - 将进程替换与此处的字符串相结合
我正在尝试将命令的结果和此处的字符串结合起来,如下所示:
我得到这个输出:
代替
为什么?
c++ - 为什么在这里使用进程替换会导致挂起?
我有一个程序需要启动其他程序,可能用文件和管道替换它们的标准输入输出。虽然它似乎“工作”,因为子进程确实从源管道获取它的 I/O,但不幸的是,它也会导致挂起。子进程似乎永远不会得到EOF
.
这是代码的最小复制,为什么打印后会挂起"Hello World\n"
?
bash - Shell 从带有尾部的文件中读取
我目前正在尝试使用 shell 从文件中读取。但是,我遇到了一个语法问题。我的代码如下:
但是,它返回我错误syntax error near unexpected token
('`
我尝试使用 tail -n遵循How to use while read line但仍然看不到错误。
tail 命令正常工作。
任何帮助都将得到批准。
bash - 用作选项值的 Bash 进程替换
我正在尝试运行
docker-compose
预计--env-file
是一个文件。我需要使用(连接)两个文件。
跑步docker-compose --env-file file_any.env config
效果很好。
单独运行cat file1.env <(echo -e "\n\n") file2.env
输出有效结果。
但它不知何故不适用于docker-compose
.
我究竟做错了什么?
bash - @<(cat <<- EOF 在 Bash 中做了什么?
我在 Bash 脚本中偶然发现了一些奇怪的 heredoc 用法。一个简化的例子是这样的:
零件有什么@<(cat <<- EOF
作用?它与普通的heredoc有什么不同?
bash - 进程替换不适用于 install-sh autoconfigure
我有一个问题, <() 不适用于自动配置中的 install-sh 它给了我这个错误
虽然这工作正常
bash - SIGPIPE 由于文件描述符和进程替换
我正在尝试从执行工具的 bash 函数中保存一些日志(其中一些在子 shell 中运行)。此外,我想将所有错误打印到终端。
我的代码在点击 ctr-c 和一个奇怪的日志文件时会导致一个 sigpipe 和退出代码 141。管道失败似乎是由陷阱内的 stdout 重定向到 stderr 引起的,这会破坏 tee 命令的 stdout 流。有趣的是,代码按预期终止,退出代码 130 没有在陷阱或cat
命令中使用重定向。
我仍然无法修复和解释生成的日志文件。为什么有两次回声,为什么陷阱回声也写入文件?
为什么函数内的重定向不是更早引起的信号管道?
日志文件
编辑:根据oguz ismail回答的工作示例