Execução do mesmo comando com um parâmetro diferente

10

Eu sei que posso executar o seguinte comando

ls Some{File,Folder}

E é equivalente a executar isso:

ls SomeFile SomeFolder

(eu também uso muito para coisas como mv place_{a,b} )

No entanto, eu queria saber se havia um atalho diferente onde eu poderia fazer algo assim:

run-command --a --whole --lot --of --flags parameter a; \
     run-command --a --whole --lot --of --flags parameter b

E eu só precisei digitar run-command --a --whole --lot --of --flags parameter {a,b} ou algo semelhante.

    
por ashays 09.01.2013 / 19:03

5 respostas

9

Supondo que você esteja usando o GNU bash ou algo semelhante:

Talvez um loop for ?

for x in a b
do
    run-command --a --whole --lot --of --flags parameter $x
done

que também pode ser escrito em uma linha como for x in a b; do run-command --a --whole --lot --of --flags parameter $x ; done

    
por 09.01.2013 / 19:06
5

Se você não estiver criando scripts e quiser simplesmente executá-lo facilmente em uma linha de comando, o comando xargs provavelmente é o que você está procurando.

O xargs vai pegar um monte de conteúdo da entrada padrão e usá-lo como argumentos para um comando, executando esse comando várias vezes, se necessário.

Tente o seguinte:

echo parameter a,parameter b | xargs -n 1 -d , run-command --a --whole --lot --of --flags

Neste exemplo, você está simplesmente fornecendo às xargs as permutações que deseja executar.

O sinalizador "-n 1" indica ao xargs para usar apenas 1 dos argumentos por execução.

O sinalizador "-d" diz ao xargs para procurar um "," na entrada como o delineador entre os argumentos a serem executados. (Note que se o argumento tiver um "," nele você precisará mudar isso para outra coisa. Se seus argumentos não tiverem espaços neles, você pode omitir este sinalizador completamente.)

Veja man xargs para mais informações.

    
por 13.01.2016 / 20:26
3

Você também pode usar uma função, que não limita sua discussão ao final:

runcom() { run-command --a --whole --lot --of --flags parameter "$1" ; }

runcom a
runcom b
    
por 09.01.2013 / 23:57
2

Você pode realizar substituições no comando anterior. Isso não funcionará com o exemplo {a, b}, porque todas as ocorrências de 'a' serão substituídas por 'b'. Mas imagine que você queira executar os seguintes comandos:

run-command --a --whole --lot --of --parameter --format xml
run-command --a --whole --lot --of --parameter --format son

Você pode fazer isso com

run-command --a --whole --lot --of --parameter --format xml
!!:s/xml/json/

Bash fará a substituição e executará

run-command --a --whole --lot --of --parameter --format json

Use gs (substituição global) para realizar várias substituições, não apenas uma.

    
por 23.10.2014 / 17:28
1

Existe o comando alias no bash:

$ alias shotcommand='run-command --a --whole --lot --of --flags parameter'

O uso é: $ shotcommand a

    
por 09.01.2013 / 19:12