我想知道如何创建一个管道
program 1 | ... | program N
多个程序要求用户输入的地方.问题是|并行启动程序,因此它们开始并行地从终端读取.
对于这种情况,有一个管道是有用的只有在程序i产生了一些输出后才启动程序(i 1).
编辑:
例:
cat /dev/sda | bzip2 | gpg -c | ssh user@host 'cat > backup'
这里gpg -c和ssh都要求输入密码.
这个特定示例的解决方法是创建ssh密钥对,但这在每个系统上都是不可能的,我想知道是否存在通用解决方案.
此外,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;猫开始是由echo写的.
执行命令后的文件内容:
$cat file
1
2
3