Не удается правильно выйти из сценария bash

Первая возможность заключается в том, что установлен неизменяемый флаг. Вы можете изменить это поведение с помощью команды chattr -i filename, чтобы разрешить внесение изменений в файл.

Но, возможно вы используете файловую систему с ошибками; это может сделать вашу файловую систему доступной только для чтения полностью или для определенных файлов. Проблемы с оперативной памятью тоже могут эмулировать эту проблему. Это можно исправить, перезагрузив сервер и запустив fsck, но иногда сервер может не запускаться и данные могут быть потеряны, когда операция перезагрузки пытается синхронизировать информацию в вашей оперативной памяти с диском во время перезапуска. Если dmesg показывает, что вы работаете с ошибками памяти или файловой системы, я бы рекомендовал сделать резервную копию данных перед перезагрузкой, если это возможно. Иногда ядро ​​выдает неверные адреса памяти из-за проблем с оборудованием, и некоторые неверные данные могут попасть на диски при перезагрузке системы. Сумасшедшее ядро ​​хуже, чем ядро ​​в панике, и может вести себя неожиданно, например, записывать в MBR или важные файлы; это редко, но возможно на плохом оборудовании, особенно если вы работаете с плохой оперативной памятью или горячим процессором. В Бразилии у нас есть большое количество неисправного оборудования, которое может привести к этому. Примечание: Если проблема связана с оперативной памятью, не запускайте FSCK — это приведет к безумию.

ОБНОВЛЕНИЕ: Поскольку вы говорите, что у вас проблемы только с tmp, есть вероятность, что tmp монтируется в другой раздел (возможно, с ошибками?) или извне (samba, nfs?), так что в этом случае нам нужна дополнительная информация о ваших смонтированных разделах. Если это так, опубликуйте результат вашей команды mount без каких-либо аргументов.

0
08.08.2017, 11:16
2 ответа

$?— это статус выхода последней выполненной команды. В вашем случае это команда [(, которую вы используете, чтобы проверить, является ли строка trueне пустой -как условие вашего цикла while).

Вам почти никогда не нужно явно использовать $?. Просто сделай

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
3
28.01.2020, 02:24

В вашем вызове 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
        ;;

[...]
0
28.01.2020, 02:24

Теги

Похожие вопросы