Этот ответ отвечает на ваш вопрос. В общем случае лучше всего использовать Windows для исправления ошибок на жестких дисках NTFS.
Но поскольку это NTFS, единственный способ действительно восстановить NTFS - это утилита chkdsk для Windows. (Существует команда ntfsfix, но она не будет такого же качества исправления, как и утилиты Windows для проверки дисков NTFS).Мой личный опыт согласуется с этим.
Вы можете использовать переменную среды $DISPLAY в качестве триггера в состоянии if. Обычно, когда эта переменная имеет значение, вы можете запускать графические приложения.
Вот пример bash:
if [[ -z $DISPLAY ]]
then
nano
else
gedit
fi
Оператор -z вернет true, когда envvar $DISPLAY пуст и ваш скрипт будет запущен nano, во всех в других случаях он будет работать gedit.
В соответствии с этим комментарием bash :
На большинстве современных настольных компьютеров Wayland (например, рабочий стол по умолчанию в Fedora и Ubuntu), $DISPLAY по-прежнему настроен из-за обратной совместимости (через XWayland), но для более надежного скрипта было бы хорошо протестировать как для $DISPLAY, так и для $WAYLAND_DISPLAY, чтобы быть уверенным ,Я бы предложил изменить тестовое выражение следующим образом:
[[ -z ${DISPLAY}${WAYLAND_DISPLAY} ]]
Таким образом, значения двух переменных будут объединены в общую строку, которая будет обработана с помощью оператора -z.
Ссылки:
Расширенное руководство по созданию Bash-скриптов: 7. Тесты Advanced Bash-Scripting Guide: 7.1. Test Constructs Advanced Bash-Scripting Guide: 7.3. Другие операторы сравненияВы можете использовать переменную среды $DISPLAY в качестве триггера в состоянии if. Обычно, когда эта переменная имеет значение, вы можете запускать графические приложения.
Вот пример bash:
if [[ -z $DISPLAY ]]
then
nano
else
gedit
fi
Оператор -z вернет true, когда envvar $DISPLAY пуст и ваш скрипт будет запущен nano, во всех в других случаях он будет работать gedit.
В соответствии с этим комментарием bash :
На большинстве современных настольных компьютеров Wayland (например, рабочий стол по умолчанию в Fedora и Ubuntu), $DISPLAY по-прежнему настроен из-за обратной совместимости (через XWayland), но для более надежного скрипта было бы хорошо протестировать как для $DISPLAY, так и для $WAYLAND_DISPLAY, чтобы быть уверенным ,Я бы предложил изменить тестовое выражение следующим образом:
[[ -z ${DISPLAY}${WAYLAND_DISPLAY} ]]
Таким образом, значения двух переменных будут объединены в общую строку, которая будет обработана с помощью оператора -z.
Ссылки:
Расширенное руководство по созданию Bash-скриптов: 7. Тесты Advanced Bash-Scripting Guide: 7.1. Test Constructs Advanced Bash-Scripting Guide: 7.3. Другие операторы сравненияВы можете использовать переменную среды $DISPLAY в качестве триггера в состоянии if. Обычно, когда эта переменная имеет значение, вы можете запускать графические приложения.
Вот пример bash:
if [[ -z $DISPLAY ]]
then
nano
else
gedit
fi
Оператор -z вернет true, когда envvar $DISPLAY пуст и ваш скрипт будет запущен nano, во всех в других случаях он будет работать gedit.
В соответствии с этим комментарием bash :
На большинстве современных настольных компьютеров Wayland (например, рабочий стол по умолчанию в Fedora и Ubuntu), $DISPLAY по-прежнему настроен из-за обратной совместимости (через XWayland), но для более надежного скрипта было бы хорошо протестировать как для $DISPLAY, так и для $WAYLAND_DISPLAY, чтобы быть уверенным ,Я бы предложил изменить тестовое выражение следующим образом:
[[ -z ${DISPLAY}${WAYLAND_DISPLAY} ]]
Таким образом, значения двух переменных будут объединены в общую строку, которая будет обработана с помощью оператора -z.
Ссылки:
Расширенное руководство по созданию Bash-скриптов: 7. Тесты Advanced Bash-Scripting Guide: 7.1. Test Constructs Advanced Bash-Scripting Guide: 7.3. Другие операторы сравненияОбычно виртуальные терминалы используют псевдо-терминалы /dev/pts. Таким образом, на основе вывода команды tty мы можем построить простой оператор case для обработки открытия конкретного редактора:
case "$(tty)" in ; "/dev/pts"*) nano ;; "/dev/tty"*) gedit ;; ;esac
Или отформатировано более красиво:
case "$(tty)" in
"/dev/pts"*) gedit ;;
"/dev/tty"*) nano ;;
*) echo "Not suitable tty" > /dev/stderr ;;
esac
По сравнению с использованием переменных среды это несколько более надежно, и учитывая, что он использует инструкцию case с командой tty немного более портативно. Скорее всего, лучше всего объединить оба с дополнительным тестированием, например "/dev/tty"*) [ -n "$DISPLAY" ] && gedit ;;
Это то, что я использовал:
# $TERM variable may be missing when called via desktop shortcut
CurrentTERM=$(env | grep TERM)
if [[ $CurrentTERM == "" ]] ; then
notify-send --urgency=critical "$0 cannot be run from GUI without TERM environment variable."
exit 1
fi
Причиной этого кода был этот вопрос: ярлык рабочего стола на сценарий Bash сработал и ожоги
Вы можете изменить его чтобы выглядеть так:
# $TERM variable may be missing when called via desktop shortcut
CurrentTERM=$(env | grep TERM)
if [[ $CurrentTERM == "" ]] ; then
nano ...
else
gedit ...
fi
Обычно виртуальные терминалы используют псевдо-терминалы /dev/pts. Таким образом, на основе вывода команды tty мы можем построить простой оператор case для обработки открытия конкретного редактора:
case "$(tty)" in ; "/dev/pts"*) nano ;; "/dev/tty"*) gedit ;; ;esac
Или отформатировано более красиво:
case "$(tty)" in
"/dev/pts"*) gedit ;;
"/dev/tty"*) nano ;;
*) echo "Not suitable tty" > /dev/stderr ;;
esac
По сравнению с использованием переменных среды это несколько более надежно, и учитывая, что он использует инструкцию case с командой tty немного более портативно. Скорее всего, лучше всего объединить оба с дополнительным тестированием, например "/dev/tty"*) [ -n "$DISPLAY" ] && gedit ;;
Это то, что я использовал:
# $TERM variable may be missing when called via desktop shortcut
CurrentTERM=$(env | grep TERM)
if [[ $CurrentTERM == "" ]] ; then
notify-send --urgency=critical "$0 cannot be run from GUI without TERM environment variable."
exit 1
fi
Причиной этого кода был этот вопрос: ярлык рабочего стола на сценарий Bash сработал и ожоги
Вы можете изменить его чтобы выглядеть так:
# $TERM variable may be missing when called via desktop shortcut
CurrentTERM=$(env | grep TERM)
if [[ $CurrentTERM == "" ]] ; then
nano ...
else
gedit ...
fi