Как я могу проверить на существование, раскрашивают мое поле Linux?

Как показывает опыт, всегда выключайте fakeraid (RAID, который объявляется в BIOS, но на самом деле выполняется драйвером ОС). Fakeraid только существует по двум причинам:

  • потому что некоторые Ose не имеют никаких собственных возможностей RAID и нуждаются в некоторой внешней помощи;
  • потому что это позволяет производителям оборудования рекламировать опцию, которую они действительно не реализуют.

Нет никакого преимущества fakeraid по Linux RAID, единственные недостатки, такие как уверенность в определенном драйвере и аппаратных средствах.

С некоторыми материнскими платами (или более точно с некоторыми BIOS RAID), Вы не можете выключить режимы RAID, если диски содержат допустимую подпись RAID. Необходимо вытереть эту подпись. Начальная загрузка с CD Linux и нуля первые несколько килобайтов и последние несколько килобайтов диска (или целого диска, если у Вас есть свободное время). Обратите внимание, что это удалит все данные по диску; если Вы захотите сохранить некоторые данные, то Вам, вероятно, будет нужна более сложная стратегия, включающая временно удаление дисков (или включение их в портах SATA не-RAID). Затем перезагрузка и возвращается в BIOS, и необходимо видеть дополнительную опцию, которая позволяет Вам действительно выключить RAID.

1
25.03.2013, 11:09
3 ответа

Возможно, с tput, проверьте доступное количество цветов,

ncolors=$(tput colors)

if [[ $ncolors -ge 8 ]];then
   # colors available
fi
3
27.01.2020, 23:21
  • 1
    С тех пор tput только проверяет переменную $TERM, она не обнаружит при использовании программы в конвейере. Общепринятая практика имеет тенденцию быть, чтобы проверить если stdout TTY также: tty(1) Ваш друг. Что-то как if tty >/dev/null 2>/dev/null && [[ $(tput colors) -ge 8 ]]; then ... работал бы хорошо. –  Alexios 25.03.2013, 13:08
  • 2
    if [[ $ncolors -gt 2 && $ncolors -lt 8 ]]; then what?; fi –  l0b0 25.03.2013, 17:26

Цвета tty являются характеристикой терминала, на котором показывают текст. Почти все терминалы сегодня обрабатывают escape-последовательность ANSI, таким образом, можно сойти с рук колоризация текст при генерации, но необходимо действительно сделать это, когда это записано (возможно, под управлением пользователя в конце записи). Например, настроенная пользовательская окраска для Вашего текста для Вашего пейджера).

1
27.01.2020, 23:21

Возможный метод обнаружения, работаете ли Вы непосредственно от эмулятора терминала, или если вывод пишется в файл журнала вместо этого, должен использовать readlink:

if [[ $(readlink -f /dev/stdout) =~ '^/dev/pts/' ]]; then
   # colors available
fi

Это должно обычно работать над современным Linux с udev и procfs. Я не уверен, существует ли что-то более портативное. Это использует специальный оператор регулярного выражения удара =~, таким образом, это будет только работать с ударом.

Альтернатива, как кто-то еще уже объяснил, для использования tty >/dev/null; в Вашем случае, хотя, можно только интересоваться стандартным выводом и не стандартным входом, таким образом, Вы захотите сделать свой стандартный вывод стандартным входом tty:

if tty <&1 >/dev/null; then
   # colors available
fi

Это отключило бы цвета, когда Вы работаете ./myscript.sh >>log_file, но включите им, когда Вы будете работать ./myscript.sh.

Я рекомендовал бы использовать [[ $(tput colors) -ge 8 ]] также, так, чтобы, когда переменная среды TERM установлен на dumb, цвета не будут произведены.

Если Вы действительно пишете, что файл журнала с раскрашивает его, можно все еще считать его; необходимо будет использовать что-то как less -r или multitail -cT ansi от эмулятора терминала с цветной поддержкой все же.

0
27.01.2020, 23:21

Теги

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