我想知道如何创建一个管道
program 1 | ... | program N
其中多个程序要求用户输入。问题是 |
并行启动程序,因此它们开始并行读取终端。
对于这种情况,使用管道 |
仅在程序 i 产生一些输出后才启动程序 (i+1) 会很有用。
编辑:
例子:
cat /dev/sda | bzip2 | gpg -c | ssh user@host 'cat > backup'
这里 gpg -c
和 ssh
都要求输入密码。
这个特定示例的解决方法是创建 ssh key 对,但这在每个系统上都不可能,我想知道是否有通用解决方案。 gpg 还允许将密码作为命令行参数传递,但出于安全原因不建议这样做。
最佳答案
你可以使用这个结构:
(read a; echo "$a"; cat) > file
例如:
$ (read a; echo "$a"; echo cat is started > /dev/stderr; cat) > file
1
cat is started
2
3
这里1
、2
和3
是键盘输入的; cat is started
由 echo 编写。
执行命令后文件
的内容:
$ cat file
1
2
3
关于具有多个程序的linux管道要求用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11786543/