将多个顺序命令的输出写入文本文件

XBM*_*ser 30 command-line bash

我尝试检查最新的 Firefox 并希望在一个 TXT 文件中获取所有哈希值。

我尝试做的是:

sha1sum firefox.tar.gz > sha.txt
Run Code Online (Sandbox Code Playgroud)

我也尝试:

md5sum firefox.tar.gz > sha.txt | sha1sum firefox.tar.gz > sha.txt | sha512sum firefox.tar.gz > sha.txt 
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,只有最后一个 sha512 被打印到 sha.txt。

我究竟做错了什么?请问有人可以帮我解决这个问题吗?

hee*_*ayl 41

正如其他人已经指出>(覆盖)和>>(附加)重定向运算符之间的区别,我将给出几个解决方案。

  1. 您可以使用 的命令分组{}功能bash将所有命令的输出发送到一个文件中:

    { sha1sum foo.txt ;sha512sum foo.txt ;md5sum foo.txt ;} >checksum.txt
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者,您可以在子 shell 中运行命令()

    ( sha1sum foo.txt ;sha512sum foo.txt ;md5sum foo.txt ) >checksum.txt
    
    Run Code Online (Sandbox Code Playgroud)

  • @codeaviator 子外壳:`()`。 (7认同)
  • 哪种解决方案被认为更通用/更便携“{}”或“()”?谢谢你。 (2认同)

ste*_*ver 5

您需要使用附加重定向器>>而不是>后续命令,例如

sha1sum zeromq-4.1.2.tar.gz > sha.txt
md5sum zeromq-4.1.2.tar.gz  >> sha.txt 
sha512sum zeromq-4.1.2.tar.gz >> sha.txt 
Run Code Online (Sandbox Code Playgroud)

请参阅Appending Redirected Outputbash 手册页 ( man bash) 的部分。