Вы могли использовать a udev
правило и fbset для принуждения разрешения кадрового буфера на обоих дисплеях, которые могут пойти некоторым путем к достижению, что Вы после.
udev
правило было бы вроде /etc/udev/rules.d/81-framebuffer-hack.rules
:
KERNEL=="card0-DVI", SUBSYSTEM=="drm", ATTR{dpms}=="On", ATTR{enabled}=="enabled", ATTR{status}=="connected", RUN+="/usr/sbin/fbset -g 1920 1080 1920 1080 32"
Можно читать на специфических особенностях udev
правила о Записи udev управляют страницей.
-eq
- арифметический оператор, который сравнивает два числа.
Используйте =
(переносной/стандартный sh
), =~
или ==
вместо него.
Также используйте кавычки, так как если ${PACKAGENAME}
содержит пробел или символ подстановки, то он будет разбит на несколько аргументов, что заставит [
увидеть больше аргументов, чем желательно. Смотрите здесь список общих ловушек бэша. См.
if [ "${PACKAGENAME}" = 'kakadu-v6_4-00902C' ]; then
echo "successfully entered if block!!"
fi
См. man bash
, поиск (/) для CONDITIONAL EXPRESSIONS
.
Замените -eq
на ==
, чтобы ваш блок был таким:-
if [ ${PACKAGENAME} == kakadu-v6_4-00902C ]; then
echo "successfully entered if block!!"
fi
Другой способ их аннулировать:
: ${PACKAGENAME:?'$PACKAGENAME variable is empty!'} #emits error and exits
[ -z "${PACKAGENAME#kakadu-v6_4-00902C}" ] || { #if var - str not empty do block
echo '$PACKAGENAME is not kakadu-v6_4-00902C'
exit 1
} >&2
Вышеуказанный блок сначала проверяет, имеет ли вообще "$PACKAGENAME"
какое-либо значение, а если нет, то выходит с ошибкой и эхом ? this'}
на stderr
. Если родительская оболочка все еще существует, то тест пройден, а затем проверяется, если при удалении вашей строки 'kakadu...' из переменной получается пустая строка -z
. Если нет, то снова выдаётся ошибка и выходит из оболочки. Если Ваша оболочка все еще существует в этот момент после выполнения блока, то в противном случае это не так.
Вероятно, такие вещи лучше всего реализовывать в функции. Например:
argeq() ( i= : ${2?^MERR: not enough parameters!} #$#>=2 || quit w/ err ^M == \r
z() { return $((${#1}>0)) ; } #return 1 if ${#1}>0 else 0
until z "${2+?}" $((i=i+1)) #until $2 is not set...
do ! z "$1" && z "${1#"$2"}" || #$1 != '' && $1 - $2 == '' or...
exit $((i${1:++1})) #exit $? == failed arg count
shift ; done #shift away one param ; continue loop
)
С помощью этой функции вы можете предоставить столько аргументов, сколько позволит ваша система. Если вы предоставите меньше 2, то она вернет 1 и выдаст сообщение на stderr
. Если вы предоставите 2 или более аргументов, то она будет обрабатывать все как строки и вернет 0, если все одинаковые и не нулевые, то вернет номер аргумента, который первым не прошел проверку.
В вашем случае она может быть использована как:
{
PACKAGENAME='kakadu-v6_4-00902C'
argeq "$PACKAGENAME" kakadu-v6_4-00902C &&
echo "kakadu-v6_4-00902C == $PACKAGENAME" ||
echo failure
! argeq "${PACKAGENAME#*-}" kakadu-v6_4-00902C &&
echo "kakadu-v6_4-00902C != ${PACKAGENAME#*-}" ||
echo failure
}
###OUTPUT###
kakadu-v6_4-00902C == kakadu-v6_4-00902C
kakadu-v6_4-00902C != v6_4-00902C
Для дальнейшей демонстрации я напишу другую функцию:
aeqecho() { i=$((i+1)) #inc for line#
argeq "$@" && echo "$i : yay" || #allswell or
! e=$? ${2+:} return || #save $?; ! exclusive || to drop ERRs
echo "$i : shite - arg$e failed" #report failure
}
{ i= s=string
aeqecho $s #1
aeqecho $s $s #2
aeqecho "$s $s" #3
aeqecho "$s $s" "${s} string" #4
aeqecho "${s}1" $s string #5
aeqecho "" "" "" #6
aeqecho "" "$s" $s #7
aeqecho 1 "${s#$s}1" $((2-1)) #8
aeqecho $s $s $s $s $s $s $s $s $s $s $s $s stng #9
aeqecho $s $s $s $s $s $s $s $s $s $s $s $s string #10
}
ERR: not enough parameters!
2 : yay
ERR: not enough parameters!
4 : yay
5 : shite - arg2 failed
6 : shite - arg1 failed
7 : shite - arg1 failed
8 : yay
9 : shite - arg13 failed
10 : yay