Обнаружение X сессий в сценарии удара (.bashrc и т.д.)

Для каждого шаблона Вы вызываете новый экземпляр sqlite программа, которая соединяется с базой данных снова. Это - отходы. Необходимо создать единый запрос, который ищет любой из ключей, затем выполните тот один запрос. Клиенты базы данных способны выполнять выполнение больших запросов.

Если согласующие отрезки длинной линии в keys файл только содержит цифры, затем можно создать запрос следующим образом:

{
  echo 'select id from main where id in (';
  

Для более общих входных данных Вы получаете идею: используйте текстовые преобразования для создания единственного выполнения больших запросов. Старайтесь проверить свой вход; здесь мы удостоверяемся, что то, что введено в запрос, синтаксически допустимо. Существует на самом деле угловой случай в примере выше: если там не идет ни в какое сравнение в файле, то синтаксис SQL недопустим; если это могло бы произойти, необходимо будет рассматривать этот случай особенно. Вот более сложный код, который заботится о пустом ящике:

16
23.05.2017, 15:39
5 ответов

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

if xhost >& /dev/null ; then echo "Display exists"
else echo "Display invalid" ; fi

Причина, по которой я это делаю, заключается в том, что я запускаю несколько сценариев в моем пользовательском crontab , которые работают с дисплеем, когда он существует, но работают по-другому, когда нет. В верхней части моего crontab я установил для переменной DISPLAY значение : 0 , хотя она еще не существует. Скрипты в crontab , которые начинаются с @reboot , будут запускаться независимо от того, есть у вас дисплей или нет. Это позволит вам динамически определять, когда ваш дисплей приходит и уходит в рамках одного и того же скрипта.

ПРИМЕЧАНИЕ: > & работает только в bash > = 4. В противном случае используйте > / dev / null 2> & 1

8
27.01.2020, 19:48

Я думаю, проверяя DISPLAY был бы лучший подход.

  • Это обрабатывает удаленные входы в систему (например, ssh-X).
  • Это доступно в большинстве - если не все - платформы.
  • Это независимо от менеджера окон/DE.
13
27.01.2020, 19:48
  • 1
    я также пошел бы для DISPLAY, или просто подавите сообщение об ошибке в целом. Дать /dev/null некоторая любовь время от времени. –  frostschutz 12.04.2013, 02:06
  • 2
    @frostschutz нет, я пытаюсь выполнить только соответствующую часть сценария. Подавление сообщений об ошибках не делает шага в том направлении. На самом деле это может привести к серьезному беспорядку, диагностирующему другие вещи, которые могли бы потенциально повредиться. –  Alois Mahdal 14.04.2013, 19:10
  • 3
    , я начал использовать этот подход вскоре после ответа, и это работало отлично с простым sshs до сих пор, когда я начал делать ssh -X---смочь использовать Vim по ssh так, чтобы содержание, выбранное визуальным режимом, получило к локальному X буферов обмена, для которых Вам не нужен xserver на стороне сервера. Таким образом, ДИСПЛЕЙ установлен так же, как эффект простого включения передачи, даже если xserver и xset не присутствуют. –  Alois Mahdal 11.07.2013, 02:45
  • 4
    Это было бы затем: if [[ $DISPLAY ]]; then … fi –  Serge Stroobandt 16.10.2017, 23:13

Я обычно использую TERM переменная для тестирования на X в моих сценариях.

TERM обычно устанавливается на linux на TTY и xterm на X.
Я использую слово "обычно" здесь, так как приложения как Экран GNU и TMux, кажется, смешивают с TERM Переменная.

6
27.01.2020, 19:48
  • 1
    echo $TERM узнать richt, устанавливающий на Вашей машине в различных консолях. Я использую [ $TERM == "linux" ] && echo do some stuff на Ubuntu –  rubo77 01.09.2015, 09:17

Это должно работать отлично:

[ ! -t 0 ] && xset b off                                  

http://tldp.org/LDP/abs/html/fto.html

-t

    file (descriptor) is associated with a terminal device

    This test option may be used to check whether the stdin [ -t 0 ] 
    or stdout [ -t 1 ] in a given script is a terminal.

Так, когда это оценивает ко лжи ([ ! -t 0 ]) мы находимся в среде GUI.

3
27.01.2020, 19:48
  • 1
    С этим я получаю тот же результат и в X и в консоли, а именно, [ -t 0 ] и [ -t 1 ] оба верны. –  Emanuel Berg 15.04.2013, 01:09
  • 2
    Странный, это работает на меня когда sshing в удаленный хост. –  terdon♦ 15.04.2013, 01:34
  • 3
    [ -t 0 ] хорошо работает на консоли в Ubuntu (использующий CTRL ALT F1) попытка –  rubo77 01.09.2015, 09:15

Существует много способов, которыми Вы могли сделать это.

В ударе попробовать

function xruns {
    if [[ `pstree -As $$ | grep xinit | wc -l` == 1 ]]; then
        echo "You are in X."
    else
        echo "You are not in X."
    fi
}

Или в zsh попробовать

#!/usr/bin/zsh

CURRENT_VT=`tty`

if [[ ${CURRENT_VT[6]} == "p" ]];        # or `${CURRENT_VT:5:1}` in bash
then
   # X stuff
else 
   # non-X stuff      
fi
0
27.01.2020, 19:48
  • 1
    Взятая Точка, но Вы тестируете свой код перед регистрацией? Первый имеет синтаксическую ошибку и на самом деле не обнаруживает, если мы находимся на X сессиях, таким образом, это будет echo 1 если X работает, и Вы регистрируетесь на пути tty1-6 или ssh. Другой всегда делает "non-X, наполняют" - я думаю это ${CURRENT_VT[6]} означает довольно 6-ю строку, чем 6-й символ. –  Alois Mahdal 14.04.2013, 19:22
  • 2
    @AloisMahdal: Ага, мой материал не работает в ударе (я использую zsh). Не думал об этом. Ну, Вы могли попробовать его в zsh (тип zsh) и возможно сделайте некоторые модификации, если Вам нравится он, чтобы заставить его работать в ударе. –  Emanuel Berg 14.04.2013, 19:28
  • 3
    @AloisMahdal: хорошо, я изменил его. Что касается "журнала на пути tty1-6", как это происходит, это - то, что я делаю, и затем я использую второе решение (выше) и устанавливаю переменную. Проверьте это .zshrc и поиск export VT. Я использую переменную для содержания то, в чем Linux VT/console/tty я нахожусь (для подсказки zsh), но в X, я просто установил его на "X" (хотя не VT). Но это - детали, Вы могли работать он любой способ, которым Вы хотели бы в ударе с помощью того же принципа. –  Emanuel Berg 14.04.2013, 19:59
  • 4
    я добавил версию удара условия к второму примеру. Однако я думаю, что первый является все еще неправильным. Возможно, имея печать PS только предки помогли бы. Я не уверен, возможно ли это, все же. –  Alois Mahdal 14.04.2013, 20:10
  • 5
    @AloisMahdal: Проверьте редактирование. Это делает это для меня, включая материал tty. –  Emanuel Berg 14.04.2013, 20:19

Теги

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