考虑以下三个命令:
$ echo -n "string1" | md5sum
34b577be20fbc15477aadb9a08101ff9 -
$ echo -n "string2" | md5sum
91c0c59c8f6fc9aa2dc99a89f2fd0ab5 -
$ echo -n "string3" | md5sum
9e6dc8685bf3c1b338f2011ace904887 -
现在,我们想要一个像这样的命令:
$ echo -n "string1 string2 string2" | xargs md5sum
34b577be20fbc15477aadb9a08101ff9 -
9e6dc8685bf3c1b338f2011ace904887 -
9e6dc8685bf3c1b338f2011ace904887 -
如何,
的输出$ echo -n "string1 string2 string2" | xargs md5sum
是:
md5sum: string1: No such file or directory
md5sum: string2: No such file or directory
md5sum: string3: No such file or directory
你能帮我们解决这个问题吗?
我们不想为md5sum执行3个进程,我们真的想在3个输入字符串上执行1个进程(这就是xargs发挥作用的原因......对吗?)
我们不想将任何文件写入磁盘,我们希望它能像访问RAM一样快。
答案 0 :(得分:3)
md5sum
不支持任何使用模式,其中单个调用可以读取多个不同的项以从stdin进行哈希处理。因此,xargs
或其他shell工具的任何可能组合都不能以您想要的方式调用它。 (在md5sum
允许将命名的FIFO作为参数传递给它的平台上,可以使用进程替换的创造性使用,但是在我测试的至少一个平台上,该命令仅适用于常规文件。)
考虑使用其他工具:
hashmany() {
python -c '
import hashlib, sys
for arg in sys.argv[1:]: print hashlib.md5(arg).hexdigest()
' "$@"
}
...此后,您的代码可以运行:
hashmany string1 string2 string3
...输出:
34b577be20fbc15477aadb9a08101ff9
91c0c59c8f6fc9aa2dc99a89f2fd0ab5
9e6dc8685bf3c1b338f2011ace904887