Não é possível sair corretamente do script bash

0

Eu fiz um script no bash.

#!/bin/bash

zen(){
mark=$(zenity --scale \
    --text 'FREQUENCY' \
    --value=$la \
    --min-value=0\
    --max-value=5000 \
    --step=1)
}
la=500

echo "Script for shim. Regulary frequency"
zen
while [ true ] 
do

case $? in

    0) echo $mark
       la=$mark
       #zenity --notification --window-icon="info" --text="Thank you!" --timeout=1
       zen
    ;;
    1) 
       # exit 1
       # sl -e || break
       # break
       # return 1       
    ;;
esac 
done
echo "thanks for using!"

Funciona bem, excluindo o ponto de saída. # está antes das opções que tentei, e cada uma delas não permite sair desse script corretamente e em vez de "obrigado por usar!" ou apenas nada que eu estou recebendo no terminal:

This option is not available. Please see --help for all possible usages.

This option is not available. Please see --help for all possible usages.

This option is not available. Please see --help for all possible usages.

This option is not available. Please see --help for all possible usages.

This option is not available. Please see --help for all possible usages.

This option is not available. Please see --help for all possible usages.

This option is not available. Please see --help for all possible usages.

This option is not available. Please see --help for all possible usages.

This option is not available. Please see --help for all possible usages.

This option is not available. Please see --help for all possible usages.

This option is not available. Please see --help for all possible usages.

This option is not available. Please see --help for all possible usages.

^XThis option is not available. Please see --help for all possible usages.

This option is not available. Please see --help for all possible usages.

This option is not available. Please see --help for all possible usages.

This option is not available. Please see --help for all possible usages.

.........................................

Parece que é um problema com zenity, quando estou tentando sair do script. Eu olhei este erro para cima e só pensei que era para atualizar zenity, o que eu fiz, mas não me deu nada de novo ...

Então, como posso resolvê-lo e quebrar esse script corretamente?

Meu sistema operacional é o Ubuntu Server 16.04

EDITAR

Por meu script, gostaria de obter a repetição da pergunta do zenity até o momento em que o usuário clica em 'cancelar'

    
por John 08.08.2017 / 08:55

2 respostas

3

$? é o status de saída do último comando que foi executado. No seu caso, isso é do comando [ (que você usa para testar se a string true não está vazia como uma condição do seu loop while ).

Você quase nunca precisa usar $? explicitamente. Apenas faça

la=500
while
  mark=$(zenity --scale \
      --text 'FREQUENCY' \
      --value="$la" \
      --min-value=0 \
      --max-value=5000 \
      --step=1)
do
  echo "$mark"
  la=$mark
done

Ou simplesmente:

mark=500
while
  mark=$(zenity --scale \
      --text 'FREQUENCY' \
      --value="$mark" \
      --min-value=0 \
      --max-value=5000 \
      --step=1)
do
  echo "$mark"
done
    
por 08.08.2017 / 10:38
0

Existe um espaço em falta antes da barra invertida na sua chamada zenity , o que pode causar o erro:

zen(){
mark=$(zenity --scale \
    --text FREQUENCY \
    --value=$la \
    --min-value=0 \
    --max-value=5000 \
    --step=1)
}

la=500

echo "Script for shim. Regulary frequency"
zen
zen_ec=$?
while true
do

    case $zen_ec in

        0) echo $mark
           la=$mark
           #zenity --notification --window-icon="info" --text="Thank you!" --timeout=1
           zen
        ;;

[...]
    
por 08.08.2017 / 10:22