grupo de linha única de comandos como individuais?

1

Eu fiz um pequeno alias e fiz uma pergunta: como executar um único grupo de linhas de comandos como comando por comando sem quebrá-lo?

echo " alias get='sudo apt-get install'" >> .bashrc & bash

aqui temos comandos como echo & bater. mesmo colocando-os todos em uma única linha eu quero executá-los comando por comando.

Atualização: por exemplo, se houver uma linha de comando de grupo como

comando1; comando 2; comando 3; comando 4; commmand5

Então eu quero executar este comando de grupo não em uma única etapa. 1º 3 comandos de cada vez e depois próximos 2 comandos. Mas a condição é que eu tenho que escrever todos esses comandos em uma única linha.

    
por rɑːdʒɑ 01.08.2013 / 15:48

4 respostas

2

Você deve ser capaz de fazer o que você tem em mente usando o agrupamento de comandos, que permite executar comandos juntos, neste caso, com sucesso ou não, ou seja, no formulário { cmd; cmd; } . Mais informações sobre o agrupamento de comandos e o uso de & & e || operadores lógicos estão disponíveis em o wiki do Bash e no Manual de referência do Bash .

Eu pensei inicialmente que a forma que sua linha de comando poderia tomar seria:

{ cmd1; cmd2; cmd3; }; sleep 1; { cmd4; cmd5;}

O comando sleep apenas dá uma pausa e pode ser removido.

No entanto , você diz que quer um retorno extra, ou confirmação para os dois últimos comandos, e para conseguir isso você precisa interromper o fluxo de comando no exemplo acima - sleep meramente pausa, mas independentemente dos dois últimos comandos serem sempre executados.

Para realmente interromper a cadeia de comando, você pode usar read -p..... , o que exige a intervenção do usuário para continuar. Aqui está o que você poderia fazer:

1) Execute os três primeiros comandos, depois dê ao usuário a oportunidade ou não de executar os últimos. Você pode ver se o oneliner que escrevi abaixo é adequado:

Nota : Por favor, substitua o comando id pelos seus próprios comandos.

id; id; id; read -p "Execute final two commands? (Y/N) " ans; if [[ $ans =~ Y|y ]]; then id; id; else echo "Finished"; fi

Agora, os três primeiros comandos são executados e, em seguida, você precisa pressionar y e retornar para os dois últimos a serem executados, mas todos os comandos estão na mesma linha. Isso é o máximo que posso conseguir, porque não tenho certeza do que você quer.

    
por user76204 06.08.2013 / 19:23
3

& executa o comando do lado esquerdo em segundo plano. Se você deseja executar o segundo comando apenas se o anterior foi executado com sucesso, use

 command1 && command2

Se você deseja executar o segundo comando, mesmo que o anterior não seja bem-sucedido, use

command1 ; command2
    
por choroba 01.08.2013 / 15:54
1

echo "alias get = 'sudo apt-get instalar'" > > .bashrc & & bash

Basta colocar dois e comercial e funciona.

    
por Phil Lawlor 01.08.2013 / 15:52
1

Se você deseja executá-los em sequência, a melhor maneira seria usar o% e comercial duplo&&. Isso é usado com frequência, por exemplo, ao executar sudo apt-get update && sudo apt-get upgrade .

O && requer que o primeiro comando seja executado com sucesso antes de iniciar o segundo. Assim, no exemplo que dei, ele atualiza a lista de pacotes e, em seguida, atualiza os pacotes, mas somente se a atualização foi bem-sucedida.

O único e comercial é útil se você quiser tornar um programa órfão de seu terminal, para que o programa permaneça aberto mesmo que o terminal ativo seja fechado, usando, por exemplo, nautilus & disown .

    
por Jez W 01.08.2013 / 15:54