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ó tinha que digitar run-command --a --whole --lot --of --flags parameter {a,b}
ou algo parecido.
shell
command-line
scripting
ashays
fonte
fonte
run-command
, muitos comandos Unix lidam com vários argumentos de arquivo em sequência.Respostas:
Supondo que você esteja usando o GNU
bash
ou algo semelhante:Talvez um
for
loop?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
fonte
for x in {a..z}; do ; run-command --a --whole --lot --of --flags parameter $x ; done
{a..z}
,*.pdf
,$(find ...)
...;
seguintedo
palavra - chave.;
.Se você não está criando um script para isso e apenas deseja executá-lo facilmente em uma linha de comando,
xargs
provavelmente é o comando que você está procurando.O xargs pega um monte de conteúdo da entrada padrão e o usa como argumentos para um comando, executando esse comando várias vezes, se necessário.
Tente o seguinte:
Neste exemplo, você está simplesmente dando ao xargs as permutações que deseja que ele execute.
O sinalizador "-n 1" para dizer ao xargs para usar apenas 1 dos argumentos por execução.
O sinalizador "-d" diz ao xargs para procurar um "," na entrada como o deliminador entre os argumentos a serem executados. (Observe que, se o argumento tiver um ",", será necessário alterá-lo para outra coisa. Se os argumentos não tiverem espaços, você poderá omitir esse sinalizador completamente.)
Veja
man xargs
para mais informações.fonte
Você também pode usar uma função, que não o limita a ter seu argumento de alteração no final:
fonte
Você pode executar substituições no comando anterior. Isso não funcionará com seu exemplo de {a, b}, porque todas as instâncias de 'a' serão substituídas por um 'b'. Mas imagine que você deseja executar os seguintes comandos:
Você pode fazer isso com
Bash fará a substituição e executará
Use gs (substituição global) para executar várias substituições, não apenas uma.
fonte
Há um
alias
comando no bash:O uso é:
$ shotcommand a
fonte