Linux带有管道操作的长Shell命令

时间:2019-05-29 14:00:13

标签: linux shell pipe tar

这是我的命令。

ssh username@hostname "cd /usr ; echo \"password\" | sudo -S tar cpf - . --ignore-failed-read" | tar xpf - -C /usr

问题在于,后面的tar命令需要sudo,因此如果我将代码更改为 ssh username@hostname "cd /usr ; echo \"password\" | sudo -S tar cpf - . --ignore-failed-read" | sudo tar xpf - -C /usr。但是我想自动运行它,这种情况不是我想要的。

如果我将命令更改为

ssh username@hostname "cd /usr ; echo \"password\" | sudo -S tar cpf - . --ignore-failed-read" | echo "password" | sudo -S tar xpf - -C /usr。在这种情况下,我无法获得以前的tar数据流。

那么我如何同时获取前一个tar数据流并将sudo赋予我的后一个tar命令?

PS:我不想创建实际的tar文件。我希望它可以即时压缩和解压缩。

有人可以帮助我吗?非常感谢〜!

1 个答案:

答案 0 :(得分:1)

将数据放入fifo,然后从stdin中读取密码:

trap 'rm -f /tmp/fifo' 0
mkfifo /tmp/fifo
ssh username@hostname 'cd /usr ; echo "password" |
     sudo -S tar cpf - . --ignore-failed-read' > /tmp/fifo & 
echo "${password?}" | sudo -S sh -c 'tar xpf - -C /usr < /tmp/fifo'