Execute os resultados do stdout

1

Existe uma maneira de realmente executar os resultados de um comando shell, em vez de usá-los como argumentos para outro comando?

Por exemplo, eu gostaria de executar '--version' em todos os executáveis em uma pasta, algo como:

ls /usr/bin/ | --version

Eu encontrei uma maneira usando o find / exec:

find /usr/ -name valgrind -exec {} --version \;

Mas eu gostaria de fazer isso com o ls. Eu pesquisei por mais de 45 minutos e não consigo encontrar ajuda.

    
por Jex_and_Izzy 23.10.2016 / 23:27

4 respostas

2

Tente fazer isso:

printf '%s\n' /usr/bin/* | while IFS= read -r cmd; do "$cmd" --version; done 
    
por 23.10.2016 / 23:40
2

Se você estiver tentando executar todos os arquivos executáveis em um determinado diretório com a opção --version , tente este one-liner (usando / usr / bin como o diretório de exemplo):

for f in /usr/bin/*; do [ -x "$f" ] && $f --version; done
    
por 24.10.2016 / 01:12
1

perl e bash ;

ls -1 | perl -pe 's/\n/ --version;\n/g' | bash

ou xargs ;

ls -1 | xargs -I {} bash {} --version;
    
por 23.10.2016 / 23:37
0

para reavaliar a saída do shell como entrada do shell, use eval .

eval "$(your command here)"
    
por 24.10.2016 / 04:07