Terminar o processo do Terminal para um resultado específico

1

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' .

    
por gowtham nanda 21.03.2014 / 19:15

3 respostas

1

um shell bash conhece seu processo pai, então você pode fazer:

(( number == 2 )) && kill $PPID

ref: link

    
por glenn jackman 21.03.2014 / 19:50
0

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
    
por Donarsson 21.03.2014 / 19:32
0

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.

    
por roadmr 21.03.2014 / 19:37