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

标签 linux bash pipe

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

program 1 | ... | program N

其中多个程序要求用户输入。问题是 | 并行启动程序,因此它们开始并行读取终端。

对于这种情况,使用管道 | 仅在程序 i 产生一些输出后才启动程序 (i+1) 会很有用。

编辑:

例子:

cat /dev/sda | bzip2 | gpg -c | ssh user@host 'cat > backup'

这里 gpg -cssh 都要求输入密码。

这个特定示例的解决方法是创建 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

这里123是键盘输入的; cat is started 由 echo 编写。

执行命令后文件的内容:

$ cat file
1
2
3

关于具有多个程序的linux管道要求用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11786543/

相关文章:

javascript - 如何在linux专用服务器上运行简单的node.js Hello World程序

linux - 比较使用变量时 Awk 在 bash 脚本中不工作

c++ - 后台程序接收大量控制台输入,而监控程序在前台运行

linux - 在邮寄过程中通过 shell 脚本将 csv 转换为 Excel

c - dup2() 在 C 中做什么

bash - 从管道获取参数

linux - 如果验证失败,如何再次询问用户输入并获取新值?

linux - 如何在运行 Arch Linux 的 ARM 设备上使用 udev 启用持久网络接口(interface)命名?

ruby - 无法在 Redhat Linux 服务器上安装 RVM

c - 不明白管道是如何工作的。 (UNIX 进程之间的共享内存)