Como executar vários comandos um após o outro com uma solicitação para o terminal (sem usar um arquivo)?

22

Eu poderia (1) preparar um arquivo com comandos digitados separados pela linha final, (2) torná-lo executável, (3) executá-lo a partir de um gerenciador de sistema de arquivos ou do terminal.

Mas isso é ridículo para conjuntos de comandos não repetíveis e sempre.

Posso digitar esses comandos no terminal em uma solicitação?

Não sei o caractere da linha final do terminal - Ctrl, Shift ou Alt com Enter não funcionam.  

Esamo
fonte
1
Em uma linha de comando, os comandos podem ser separados por ponto e vírgula.
precisa saber é o seguinte

Respostas:

27

Você pode separar comandos com &&ou ;.

  • && somente executa o próximo comando se o anterior saiu com o status 0 (foi bem-sucedido):

    command1 && command2 && command3
    
  • ; executa todos os comandos, mesmo que o anterior saia com um status diferente de zero:

    command1; command2; command3
    

Você pode combinar esses separadores como desejar.

MrVaykadji
fonte
6
para command1 && command2command2 será executado apenas se command1 for bem sucedido.
Souravc
Discussões agradáveis, publicações relevantes / similares: askubuntu.com/questions/334994/… stackoverflow.com/questions/13077241/…
gevang
@souravc: Eu fiz uma edição, obrigado, eu aprendi alguma coisa.
MrVaykadji
se combinando sudo apt upgradee sudo systemctl reboot, você precisaria adicionar 'sudo' duas vezes, ou 'lembrará' sudo para o segundo comando?
Koen
9

Se você estiver interessado em digitar cada comando em sua própria linha em uma única solicitação, poderá usar o seguinte método:

  • Inicie sua solicitação (primeira linha) com if :; then(isso significa: se verdadeiro, então faça) e pressione Enter; seu prompt será alterado agora >e nada será executado.

  • Digite seus comandos, cada um seguido por Enter

  • Termine sua solicitação com fi(fim da ifcondição acima ) e pressione Enter. Agora todos os seus comandos serão executados na ordem especificada.

Exemplo:

radu@Radu: ~ $ if :; then
> echo 'something'
> echo 'something else'
> echo 'List current directory contents:'
> ls
> echo 'Change current directory with root directory:'
> cd
> #finish
> fi
something
something else
List current directory contents:
Backups            Desktop           forma3d  Public      Untitled txt.txt~
bin                Documente         Music    Templates   Videos
configuration.php  examples.desktop  passwd~  tmp~
Downloads          file~             Poze     Ubuntu One
Change current directory with root directory:
radu@Radu: / $
Radu Rădeanu
fonte
if true; thenpode ser mais claro de ler, se desejado. :pode ser confundido com a ;primeira vista.
kiri
4

Primeiro, coloque um {em sua própria linha.
Em seguida, insira seus comandos.
Em seguida, coloque um }em uma nova linha e pressione Enter. Seus comandos serão executados.

Exemplo:

{
echo list
echo of
echo commands
echo to run at once
}

que será impresso (de uma só vez, sem aviso no meio):

list
of
commands
to run at once

Como observação lateral, { .. }está a sintaxe de agrupamento de comandos do Bash. Geralmente é útil em conjunto com &&ou ||('e' e 'ou' respectivamente)

kiri
fonte
É o mesmo que if :; thenjá mencionado? Ou é um pouco diferente?
MrVaykadji
1
@MrVaykadji É o mesmo resultado, mas um método diferente. if :executa um teste no comando nulo, que sempre retornará verdadeiro. { .. }apenas agrupa os comandos. Pessoalmente, acho { .. }mais fácil me lembrar.
kiri