它们[可能]完全相同(gold有一个额外的版本——见本文结尾)。
但请考虑此答案代码高尔夫的其余部分,以获得提取版本的最佳方式。
dpkg -L binutils | grep "/usr/bin/" | xargs -i sh -c "{} --version"
Run Code Online (Sandbox Code Playgroud)
与roadmr 所做的差不多。
dpkg -L binutils | xargs -i sh -c "{} --version 2>/dev/null || exit 0"
Run Code Online (Sandbox Code Playgroud)
尝试运行所有 dpkg -L ...输出。显然只有可执行文件会运行,所以我们只需要重定向错误(并xargs忽略它们)。
dpkg -L binutils | xargs -i bash -c '[[ -x "{}" && -f "{}" ]] && {} --version'
Run Code Online (Sandbox Code Playgroud)
测试我们处理的是可执行文件而不是过滤路径。
sudo apt-get install parallel
dpkg -L binutils | grep /usr/bin/ | parallel {} --version
dpkg -L binutils | parallel {} --version 2>/dev/null
dpkg -L binutils | parallel '[[ -x "{}" && -f "{}" ]] && {} --version'
Run Code Online (Sandbox Code Playgroud)
这次我们使用 GNUparallel来做同样的方法。parallel让我们跳过某些不便之处xargs(比如它不能跳过任何非零退出代码。man parallel是一本真正好的读物。
话虽如此,虽然较短,但我所有的示例都分叉到了一个新的 shell 中(不可避免地使用xargs,有点像parallel),所以它们都比 roadmr 慢一些。第一个是最快的。
编辑:直到现在...
sh <(dpkg -L binutils | awk '/bin\// {print $0 " --version"}')
Run Code Online (Sandbox Code Playgroud)
只有两个 fork(有点),它和for 循环一样快(但要短得多)。
编辑:它们实际上并不完全相同。gold具有其他命令没有的辅助版本 (1.11)。
$ sh <(dpkg -L binutils | awk '/bin\// {print $0 " --version"}') | \
grep Binutils | sort -u | column -t
GNU addr2line (GNU Binutils for Ubuntu) 2.23.52.20130913
GNU ar (GNU Binutils for Ubuntu) 2.23.52.20130913
GNU assembler (GNU Binutils for Ubuntu) 2.23.52.20130913
GNU c++filt (GNU Binutils for Ubuntu) 2.23.52.20130913
GNU dwp (GNU Binutils for Ubuntu) 2.23.52.20130913
GNU elfedit (GNU Binutils for Ubuntu) 2.23.52.20130913
GNU gold (GNU Binutils for Ubuntu 2.23.52.20130913) 1.11
GNU gprof (GNU Binutils for Ubuntu) 2.23.52.20130913
GNU ld (GNU Binutils for Ubuntu) 2.23.52.20130913
GNU nm (GNU Binutils for Ubuntu) 2.23.52.20130913
GNU objcopy (GNU Binutils for Ubuntu) 2.23.52.20130913
GNU objdump (GNU Binutils for Ubuntu) 2.23.52.20130913
GNU ranlib (GNU Binutils for Ubuntu) 2.23.52.20130913
GNU readelf (GNU Binutils for Ubuntu) 2.23.52.20130913
GNU size (GNU Binutils for Ubuntu) 2.23.52.20130913
GNU strings (GNU Binutils for Ubuntu) 2.23.52.20130913
GNU strip (GNU Binutils for Ubuntu) 2.23.52.20130913
Run Code Online (Sandbox Code Playgroud)