Проверка сохраненного состояния завершения команды с помощью var = $ ?;[[$ var]] всегда верно, будь то 0 или 1 - PullRequest
0 голосов
/ 16 октября 2019

Рассмотрим:

true; run_backup=$?
if [[ $run_backup ]]; then
  echo "The user wants to run the backup"
fi

... и ...

false; run_backup=$?
if [[ $run_backup ]]; then
  echo "The user wants to run the backup"
fi

The user wants to run the backup испускается, имеет ли run_backup 0 (успех) или 1 (ложь)!

Что здесь происходит?

(Моя настоящая команда вместо true или false имеет форму zenity --question --text "...").

Ответы [ 2 ]

2 голосов
/ 16 октября 2019

[[ $run_backup ]] не является булевой проверкой;он терпит неудачу, только если его аргумент является пустой строкой (которая не является ни 0, ни 1).

Так как zenity возвращает 0, если вы нажмете OK, вы хотите что-то вроде

[[ $run_backup -eq 0 ]] && echo "The user wants to run the backup"

или

(( run_backup == 0 )) && echo "The user wants to run the backup"

или

# You need to negate the value because success(0)/failure(!=0) use
# the opposite convention of true(1)/false(0)
(( ! run_backup )) && echo "The user wants to run the backup"

Исходя из того факта, что run_backup был исходным статусом команды zenity в исходном вопросе, самой простой вещью было быпросто использовать && для объединения zenity и вашей функции в одну команду.

zenity --question --width=300 --text "..." && echo "The user wants to run the backup"
0 голосов
/ 16 октября 2019

Ответ - да, потому что ни 0, ни 1 не равны NULL.

...