um shell bash conhece seu processo pai, então você pode fazer:
(( number == 2 )) && kill $PPID
ref: link
por exemplo, considere a seguinte situação:
Eu preciso imprimir alguns números aleatoriamente um após o outro com um intervalo de tempo de 5 segundos entre cada um, e eu preciso terminar o processo terminal de impressão de números, se eu encontrar uma saída de '2'. É possível.
Eu sei que eu poderia fazer o mesmo em c, c ++, java, etc etc. Mas eu gostaria de fazer isso usando o script bash.
Nota: Se somente 'depois' eu encontrar uma 'saída' de '2' (ou qualquer coisa), então o processo precisa ser encerrado, eu enfatizo isso porque 'eu preciso finalizar o processo do terminal para um resultado em particular' .
um shell bash conhece seu processo pai, então você pode fazer:
(( number == 2 )) && kill $PPID
ref: link
Você pode usar uma instrução simples if
para fazer isso:
# your file reading code goes here, make sure $output is set
if [ $output -eq 2 ]; then return; fi
O que você quer é matar o shell a partir do qual você executa o script. Isso é um pouco complicado, pois a execução de um script gerará outro shell, e os métodos triviais de eliminá-lo ( kill -9 $$
ou exit
) funcionarão no shell spawned , não no invocado pelo shell. terminal.
A única forma confiável que encontrei de fazer isso é fornecer seu script em vez de executá-lo. Então, ao invés de:
bash script.sh
faça:
. script.sh
isso fará com que o material seja executado no shell de invocação, não no spawned.
O script em si é fácil, como visto na outra resposta:
while true; do sleep 1; number=$RANDOM; echo $number; if [ 2 = 2 ]; then exit; fi; done
Na verdade, se você executar isso como um one-liner no seu shell atual, irá fechar o terminal quando vir um valor de 2.
Você não disse de onde os números aleatórios virão; Eu usei o built-in RANDOM bash que gera números inteiros no intervalo 0-32767.