
Suponha que eu tenha um comando de terminal chamado foo
(na realidade, isso seria algo parecido cd
ou ls
algo mais complicado. Existe uma maneira de executar esse comando inúmeras vezes SEM o uso de um script.
Por exemplo, quero fazer o equivalente ao seguinte:
foo && foo && foo && foo && foo
Existe alguma maneira de fazer algo nos moldes de
foo * 5
ou talvez
5:foo
Estou usando uma máquina Linux.
Responder1
Adicione alguma semivírgula na resposta do blogueiro para torná-la de uma linha:
for variables in {1 2 3 4 5}; do ls; done
Responder2
o blogueiro está certo. entretanto, é importante observar exatamente a sintaxe: se você estiver usando um shell interativo (por exemplo, o terminal)
echo -n; for i in {1..5}; do if [[ $? ]]; then foo; fi; done
o "$?" retorna o status da chamada de função anterior; como estamos chamando "echo" primeiro, a primeira iteração do loop será "true" (0 no bash). O "fi" fecha a instrução "if" e os pontos e vírgulas são necessários.
aqui está a mesma coisa se você estivesse escrevendo um script bash:
#!/bin/bash
echo -n
para i em {1..5}; fazer
se [[ $? ]]; então
foo
fi
pronto
você notará que foo não tem ponto e vírgula depois; ao escrever um script bash completo em um ambiente onde as quebras de linha estão disponíveis (por exemplo, seu editor de texto favorito), as quebras de linha fazem a mesma coisa que o ponto e vírgula :)
Além disso, observe que você poderia usar
[[ $? ]] && foo
em vez da instrução if; perceba que o && significa que foo só será executado se o foo anterior não tiver erro. ou seja, na chamada de função
thing1 && thing2
thing2 só será executado se thing1 funcionar bem (tecnicamente, se retornar um valor 0) para ignorar se foo está funcionando ou não, use ponto e vírgula em vez de &&
Responder3
Você pode tentar algo como:
for i in {1..10}; do YourCommand; done
Exemplo:
for i in {1..5}; do ls -l; done
Responder4
Eu encontrei um ótimo métodoaqui.
Eu sei que ainda é "uma espécie de script", mas acho que é o mais próximo que você pode chegar sem digitar uma linha de comando inteira com comandos.
Você pode criar o comando repeat
com o qual pode fazer isso:
repeat 5 ./foo
Adicione as seguintes linhas ao final do seu ~/.bashrc
(se você estiver usando o bash):
repeat() {
n=$1
shift
while [ $(( n -= 1 )) -ge 0 ]
do
"$@"
done
}
e na próxima vez que você fizer login (ou iniciar o bash), poderá usar repeat 5 ./foo
.
Por falar nisso. repeat
já é uma palavra-chave (que faz exatamente a mesma coisa) em csh, tcsh e zsh, então com essa adição você irá adicioná-la bash
e funcionará exatamente da mesma forma.