Tanto quanto eu sei, o uso &
após o comando é para executá-lo em segundo plano.
Exemplo de &
uso:tar -czf file.tar.gz dirname &
Mas que tal &&
? (veja este exemplo: /server/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188 )
bash
shell
command-line
syntax
Capitão
fonte
fonte
false && echo "Will not be printed"
.Com casca, quando você vê
a intenção é executar o comando que segue
&&
apenas se o primeiro comando for bem-sucedido. Isso é idiomático dos shells Posix, e não apenas encontrado no Bash.Ele pretende impedir a execução do segundo processo se o primeiro falhar.
Você pode perceber que eu usei a palavra "intenção" - por uma boa razão. Nem todos os programas têm o mesmo comportamento; portanto, para que isso funcione, você precisa entender o que o programa considera uma "falha" e como ele lida com isso lendo a documentação e, se necessário, o código fonte.
Seu shell considera um valor de retorno 0 para true, outros números positivos para false
Os programas retornam um sinal ao sair. Eles devem retornar 0 se sair com êxito ou maior que zero se não o fizerem. Isso permite uma quantidade limitada de comunicação entre processos.
O
&&
é referido comoAND_IF
na gramática shell POSIX , que é parte de umaand_or
lista de comandos, que também inclui o||
que é umOR_IF
com a semântica semelhantes.Símbolos gramaticais, citados na documentação:
E a gramática (também citada na documentação), que mostra que qualquer número de
AND_IF
s (&&
) e / ouOR_IF
s (||
) pode ser unido (comoand_or
definido recursivamente):Ambos os operadores têm precedência igual e são avaliados da esquerda para a direita (eles são deixados associativos). Como dizem os documentos:
No primeiro caso, o false é um comando que sai com o status de
1
o que significa
echo foo
que não roda (ou seja, curto-circuitoecho foo
). Então o comandoecho bar
é executado.No segundo caso, true sai com um código de
0
e, portanto,
echo foo
não é executado, entãoecho bar
é executado.fonte
Um uso bastante comum para '&&' é compilar software com ferramentas automáticas. Por exemplo:
Basicamente, se a configuração for bem-sucedida, o make será executado para compilar e, se for bem-sucedido, o make será executado como root para instalar o programa. Eu uso isso quando tenho quase certeza de que tudo vai funcionar e isso me permite fazer outras coisas importantes, como olhar para o stackoverflow e não 'monitorar' o progresso.
Às vezes eu me empolgo muito ...
Eu faço isso quando, por exemplo, fazendo um linux a partir da caixa do zero.
fonte
set -o errexit
Bash.&&
comandos de strings juntos. Os comandos sucessivos somente são executados se os anteriores tiverem êxito.Similarmente,
||
permitirá que o comando sucessivo seja executado se o anterior falhar.Consulte Programação do Bash Shell .
fonte
Veja o exemplo:
O Shell tentará criar o diretório
test
e, em seguida, somente se tiver sido bem-sucedido , tentará criar o arquivo dentro dele.Portanto, você pode interromper uma sequência de etapas se uma delas falhar.
fonte
É para executar uma segunda instrução se a primeira instrução terminar com sucesso. Como uma declaração if:
Suas primeiras tentativas se 1 == 1, se isso for verdade, verifica se 2 == 2
fonte
&&
if
testes funcionam no bash. Eu nunca pensei nisso como uma cadeia de comandos de comparação, quebrando quando algum deles falhou. Então você tem o meu upvote :)||
, para encadear comandos até que um deles seja bem-sucedido:eei || leu || uie || echo prout3 || echo "never executed"
command_1 && command_2
: execute command_2 apenas quando command_1 for executado com sucesso.command_1 || command_2
: execute command_2 apenas quando command_1 não for executado com êxito.Parece semelhante à forma como uma condição 'if' é executada em uma linguagem de programação convencional, como, na
if (condition_1 && condition_2){...}
condição_2 será omitida se a condição_1 forfalse
e naif (condition_1 || condition_2){...}
condição_2 será omitida se a condição_1 fortrue
. Veja, é o mesmo truque que você usa para codificar :)fonte
Quando o programa verifica o comando, o programa cria um número chamado código de saída; se as duas condições forem verdadeiras, o código de saída será zero (0); caso contrário, o código de saída será um número positivo. somente ao exibir Igual se o código de saída for produzido zero (0), o que significa que ambas as condições são verdadeiras.
fonte
if [[ ($first_command == "1") && ($two_command == "2") ]];then echo "Equal"; fi