Como executar o programa executável com filtro

1

Eu quero executar um script de shell. Este script tem um nome longo. Então eu quero usar filtro para arquivo.

ex: ls | grep myfile | ./

É possível executar um arquivo com filtro.

    
por mustafa 23.06.2014 / 10:39

3 respostas

2

Basta digitar:

*myfile*

Você também pode fazer:

"$(ls | grep pattern)"

se você tiver correspondência de expressão regular completa em vez de apenas curingas de nome de arquivo.

Todas essas soluções pressupõem que há apenas um único arquivo no diretório atual que corresponde ao padrão.

    
por 23.06.2014 / 17:13
1

Você pode usar xargs para esse tipo de coisa:

ls | grep myfile | xargs sh

xargs lê as linhas em sua entrada e as fornece como argumentos para o programa que é dado como argumento: aqui, ele lerá a saída do grep e então executará sh long_myfile_name . (Altere sh para bash se o seu script depender de recursos específicos do Bash ou de algum outro shell)

Você também pode executar sh *myfile* com essencialmente o mesmo efeito neste caso simples - se seu grep for mais complicado, você pode não conseguir fazer isso, mas sh "$(ls | grep ...)" funcionará.

Dito isto, existem algumas razões pelas quais você pode não querer fazer isso: em particular, se for possível que em algum momento haja dois arquivos que correspondam ao seu grep . Nesse ponto, uma das três coisas acontecerá: seu script recebe um argumento extra, dois scripts diferentes são executados ou outro script é executado. Você poderia, digamos, canalizar em head -n 1 para evitar os dois primeiros, mas um arbitrário será executado, o que não ajuda muito. No caso $() , ele simplesmente falhará, o que é provavelmente o melhor de um conjunto ruim de resultados. Se houver espaços nos nomes dos arquivos, você terá que tomar ainda mais cuidado.

A conclusão da tabulação do seu shell pode ser uma opção melhor: você pode escrever *myfile* e pressionar TAB para obter uma expansão correta ou uma indicação de que há mais de uma possibilidade, ou apenas começar a escrever o nome e a tabulação completa até o fim. Se você está executando isso em um script, basta colocar o nome completo lá - você só tem que escrever uma vez. A resposta acima da linha funcionará, mas eu não recomendo realmente.

    
por 23.06.2014 / 10:52
0

você pode usar xargs , por exemplo

ls | grep myfile | xargs bash

ou filtrar usando find

find ./ -maxdepth 1 -name "myfile" -exec ./'{}' \;

espero que isso ajude:)

    
por 23.06.2014 / 10:49

Tags