Eles são [<> provavelmente ] todos iguais ( gold
tem uma versão extra - veja o final deste post).
Mas considere o resto desta resposta de código de golfe para a melhor maneira de extrair as versões.
dpkg -L binutils | grep "/usr/bin/" | xargs -i sh -c "{} --version"
Faz muito bem o que o roadmr faz.
dpkg -L binutils | xargs -i sh -c "{} --version 2>/dev/null || exit 0"
Tenta executar tudo dpkg -L ...
outputs. Obviamente, apenas os executáveis serão executados, portanto, só precisamos redirecionar o erro (e fazer com que xargs
os ignore).
dpkg -L binutils | xargs -i bash -c '[[ -x "{}" && -f "{}" ]] && {} --version'
Teste que estamos lidando com um arquivo executável em vez de um caminho de filtragem.
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'
Desta vez usamos o GNU parallel
para fazer as mesmas abordagens. parallel
nos permite ignorar algumas inconveniências em xargs
(como se não fosse possível ignorar qualquer código de saída diferente de zero. man parallel
é uma leitura genuinamente boa.
Com tudo isso dito, ainda que mais curto, todos os meus exemplos desembocam em um novo shell (inevitável com xargs
e mais ou menos o ponto de parallel
), então eles são um pouco mais lentos que os de roadmr. O primeiro é o mais rápido.
Editar: Até agora ...
sh <(dpkg -L binutils | awk '/bin\// {print $0 " --version"}')
Apenas dois garfos (mais ou menos) e são tão rápidos quanto o loop for (embora muito mais curto).
Editar : eles não são exatamente os mesmos. gold
tem uma versão secundária (1.11) que os outros comandos não possuem.
$ 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