Repetir um comando do terminal

Repetir um comando do terminal

Suponha que eu tenha um comando de terminal chamado foo(na realidade, isso seria algo parecido cdou lsalgo 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 repeatcom 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. repeatjá é uma palavra-chave (que faz exatamente a mesma coisa) em csh, tcsh e zsh, então com essa adição você irá adicioná-la bashe funcionará exatamente da mesma forma.

informação relacionada