Bash 스크립트를 올바르게 종료할 수 없습니다.

Bash 스크립트를 올바르게 종료할 수 없습니다.

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!"

종료점을 제외하고는 잘 작동합니다. # 내가 시도한 옵션 앞에는 "사용해주셔서 감사합니다!" 대신 이 스크립트에서 적절한 종료가 허용되지 않습니다. 그렇지 않으면 터미널에 아무것도 표시되지 않습니다.

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.

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

스크립트를 종료하려고 하면 zenity에 문제가 있는 것 같습니다. 오류를 찾아봤고 유일하게 합리적인 아이디어는 zenity를 업그레이드하는 것이었습니다. 이미 업그레이드했지만 새로운 결과는 나오지 않았습니다...

그렇다면 어떻게 수정하고 이 스크립트를 올바르게 중단할 수 있을까요..?

내 운영 체제는 Ubuntu Server 16.04입니다.

편집하다

내 스크립트를 사용하여 zenity부터 사용자가 "취소"를 클릭하는 순간까지 반복되는 문제를 해결하고 싶습니다.

답변1

$?마지막 명령 실행의 종료 상태입니다. 귀하의 경우 이것은 명령입니다 ( 루프 조건 으로 문자열이 비어 있지 않은지 [테스트하는 데 사용함 ).truewhile

$?명시적으로 사용할 필요는 거의 없습니다 . 그냥 해

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

또는 간단하게:

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

답변2

호출 시 백슬래시 앞에 공백이 없으면 zenity오류가 발생할 수 있습니다.

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
        ;;

[...]

관련 정보