linux管道有多个程序要求用户输入

Joe*_*lis 6 linux bash pipe

我想知道如何创建一个管道

program 1 | ... | program N
Run Code Online (Sandbox Code Playgroud)

多个程序要求用户输入的地方.问题是|并行启动程序,因此它们开始并行地从终端读取.

对于这种情况,|只有在程序i产生一些输出之后才有一个启动程序(i + 1)的管道是有用的.

编辑:

例:

cat /dev/sda | bzip2 | gpg -c | ssh user@host 'cat > backup'
Run Code Online (Sandbox Code Playgroud)

这里既要求密码gpg -cssh要求密码.

这个特定示例的解决方法是创建ssh密钥对,但这在每个系统上都是不可能的,我想知道是否存在通用解决方案.此外,gpg允许将密码短语作为命令行参数传递,但出于安全原因,不建议这样做.

Igo*_*bin 1

您可以使用此结构:

(read a; echo "$a"; cat) > file
Run Code Online (Sandbox Code Playgroud)

例如:

$ (read a; echo "$a"; echo cat is started > /dev/stderr; cat) > file
1
cat is started
2
3
Run Code Online (Sandbox Code Playgroud)

这里123是通过键盘输入的;cat is started是回声写的。

file命令执行后内容:

$ cat file
1
2
3
Run Code Online (Sandbox Code Playgroud)