在 dash 中模拟 zsh multios(多个重定向)

Mar*_*ter 2 shell zsh io-redirection dash

在 中zsh,启用该选项后multios,我可以将输出通过管道传输到两个不同的进程,即:

cat /dev/sda > sda.img | sha256sum > sda.img.sha256
Run Code Online (Sandbox Code Playgroud)

我怎样才能在dashie中实现同样的目标/bin/sh

Ini*_*ian 5

您可以使用tee将流复制到文件并将结果通过管道传输,以便sha256sum从标准输入读取并将其写入单独的文件。不过,从标准输入指示符读取-是可选的

</dev/sda tee sda.img | sha256sum - > sda.img.sha256
Run Code Online (Sandbox Code Playgroud)

这当然应该适用于任何最小的 shell,例如dash.

zsh实际上,这里比使用multios更有效,因为数据通过的管道更少。在这里,使用多操作系统方法,它被读取一次tee,一次被sha256sum写入两次,它被读取一次,一次被zsh的内部teeing进程(通过管道)读取一次,一次被写入一次,两次被内部teeing进程读取。 。teecatsha256sumcat

在支持进程替换( ) 的地方,ksh例如在 中,您可以使用它bash>(..)zsh

< /dev/sda tee >(sha256sum > sda.img.sha256) > sda.img
Run Code Online (Sandbox Code Playgroud)