Как остановить tmux, получающий сочетания клавиш?

Помимо предложенного ответа, я использую следующую команду:

nohup ./scanner.py -flag1 flag1value -flag2 flag2value &

для создания нового экземпляра. Для просмотра всех запущенных экземпляров scanner.py я использую:

ps aux | grep scanner.py

Для уничтожения конкретного экземпляра я использую:

kill -9 {PID}

, где {PID} получается из команды ps aux , например, kill -9 1234

-121--175524-

Они называются операторами оболочки. Я приведу краткий обзор наиболее распространенных среди двух основных классов, управляющих операторов и операторов перенаправления , и как они работают в отношении оболочки bash.

A. Операторы управления

В командном языке оболочки маркер, который выполняет функцию управления.
Это один из следующих символов:

 & & ();;;  | | |

И | & в bash.

A ! является не оператором управления, а зарезервированным словом . Он становится логическим оператором NOT [отрицания] внутри Арифметических выражений и внутри тестовых конструкций (при этом требуется разделитель пространства).

A.1 Список терминаторов

  • ; : Будет выполняться одна команда за другой, независимо от результата первой.

     command1; command2
    

    Сначала выполняется команда command1 на переднем плане, после чего выполняется команда command2 .

    Новая строка, которая не находится в последовательности литерале или после определенных ключевых слов, не эквивалентна оператору точки с запятой. Список ; разделенных простых команд по-прежнему является списком - как и в синтаксическом анализаторе оболочки, необходимо продолжать чтение простых команд, которые следуют за ; разделенных простых команд перед выполнением, в то время как новая строка может разделить весь список команд или список списков. Разница тонкая, но сложная: учитывая, что оболочка не имеет предыдущего императива для чтения в данных, следующих за новой линией, новая линия отмечает точку, где оболочка может начать оценивать простые команды, которые она уже читала, в то время как ; полукольца не.

  • & : Будет выполнена команда в фоновом режиме, позволяющая продолжить работу в той же оболочке.

      command1 & command2
    

    Здесь command1 запускается в фоновом режиме и command2 запускается на переднем плане немедленно, не дожидаясь выхода command1 .

    Новая строка после command1 является необязательной.

A.2 Логические операторы

  • & & : используются для создания списков AND, они позволяют выполнять одну команду только в случае успешного выхода другой команды.

      command1 && command2
    

    Здесь command2 будет выполняться после завершения command1 и только , если command1 был успешным (если его код выхода был 0). Обе команды выполняются на переднем плане.

    Эта команда также может быть записана

    , если команда1
    затем команд2
    else false
    fi
    

    или просто , если command1; затем command2; fi , если статус возврата игнорируется.

  • | | : Используется для создания списков ИЛИ и позволяет выполнять одну команду только в случае неудачного выхода другой команды.

      command1 || command2
    

    Здесь command2 будет выполняться только в случае сбоя command1 (если возвращено состояние выхода, отличное от 0). Обе команды выполняются на переднем плане.

    Эта команда также может быть записана

    , если команда1
    тогда true
    команда else 2
    fi
    

    или более коротким способом , если! command1; затем command2; fi .

    Обратите внимание, что & & и | | являются левоассоциативными; Для получения дополнительной информации см. Приоритет логических операторов оболочки & &, | .

  • ! : Это зарезервированное слово, которое действует как оператор «не» (но должно иметь разделитель), используемое для отмены возвращаемого состояния команды - return 0, если команда возвращает ненулевое состояние, return 1, если возвращает состояние 0. Также логический NOT для утилиты test .

    ! command1
    
    [ ! a = a]
    

    И истинный оператор NOT в арифметических выражениях:

     $ echo $ (! 0)) $ ((! 23))
    1 0
    

A.3 Оператор трубы

  • | : оператор трубы передает выходные данные одной команды в качестве входных данных другой. Команда, созданная из оператора трубопровода, называется трубопроводом .

      command1 | command2
    

    Любой вывод, напечатанный command1 , передается в качестве ввода в command2 .

  • | & : Это краткий текст для 2 > & 1 | в bash и zsh. Он передает как стандартные выходные данные, так и стандартную ошибку одной команды в качестве входных данных другой.

     command1 | & command2
    

A.4 Другая пунктуация списка

; используется исключительно для обозначения конца оператора обращения . Ksh, bash и zsh также поддерживают ; & для перехода к следующему случаю и ; & (не в ATT ksh), чтобы продолжить и проверить последующие случаи.

( и ) используются для группирования команд и запуска их в субкорпусе. { и } также группируют команды, но не запускают их во вложенном корпусе. См. этот ответ для обсуждения различных типов скобок, скобок и фигурных скобок в синтаксисе оболочки.

B. Операторы перенаправления

Оператор перенаправления

В командном языке оболочки маркер, выполняющий функцию перенаправления. Это один из следующих символов:

  > |  >  & 

Они позволяют управлять вводом и выводом команд. Они могут отображаться в любом месте простой команды или следовать команде. Перенаправления обрабатываются в порядке их появления слева направо.

  • : ввод команды.

     команда 

    Выше будет выполнена команда для содержимого file.txt .

  • : то же самое, что и выше, но файл открыт в режиме чтение + запись вместо команды только чтение :

      file.txt
    

    Если файл не существует, он будет создан.

    Этот оператор используется редко, поскольку команды обычно только считывают из своего stdin, хотя он может пригодиться в ряде конкретных ситуаций .

  • > : направляет выходные данные команды в файл.

     команда > out.txt
    

    Выходные данные команды сохраняются как out.txt . Если файл существует, его содержимое будет перезаписано, а если он не существует, он будет создан.

    Этот оператор также часто используется для выбора способа печати: стандартная ошибка или стандартный вывод :

     команда > out.txt 2 > error.txt
    

    В приведенном выше примере > перенаправляет стандартный вывод, а 2 > перенаправляет стандартную ошибку. Вывод также можно перенаправить с помощью 1 > , но, поскольку это значение по умолчанию, значение 1 обычно опускается и записывается просто как > .

    Таким образом, для выполнения команды на file.txt и сохранения ее выходных данных в out.txt и любых сообщений об ошибках в error.txt необходимо выполнить команду

      out.txt 2 > error.txt
    
  • > | : Выполняет то же самое, что и > , но перезаписывает цель, даже если оболочка настроена на отказ от перезаписи (с помощью set -C или set -o noclobber ).

     команда > | out.txt
    

    Если out.txt существует, выходные данные команды заменяют ее содержимое. Если он не существует, он будет создан.

  • > > : Выполняется то же самое, что и > , за исключением того, что при наличии целевого файла добавляются новые данные.

     команда > > out.txt
    

    Если файл out.txt существует, к нему добавляется команда после того, что уже находится в нем. Если он не существует, он будет создан.

  • & > , > & , > > & и & > > : (нестандартно). Перенаправление как стандартных ошибок, так и стандартных выходных данных, замена или добавление соответственно.

     команда & > out.txt
    

    Как стандартная ошибка, так и стандартный вывод команды будут сохранены в файле out.txt , перезаписав его содержимое или создав его, если он не существует.

     команда & > > out.txt
    

    Как указано выше, за исключением того, что при наличии out.txt к нему будут добавлены выходные данные и ошибка команды .

    Вариант & > происходит из bash , в то время как вариант > & происходит из csh (десятилетиями ранее).Они конфликтуют с другими операторами оболочки POSIX и не должны использоваться в портативных скриптах sh .

  • : Вот документ. Часто используется для печати многострочных строк.

      команда 

    Здесь команда принимает все до тех пор, пока не обнаружит следующее вхождение WORD , Text в приведенном выше примере в качестве ввода. Хотя WORD часто является EoF или его вариациями, это может быть любая буквенно-цифровая (и не только) строка, которая вам нравится. При кавычке WORD текст в данном документе обрабатывается буквально, и расширения не выполняются (например, для переменных). Если он не указан в кавычках, переменные будут развернуты. Дополнительные сведения см. в руководстве .

    Если вы хотите передать выходные данные команды непосредственно в другую команду или команды, необходимо поместить канал в ту же строку, что и , нельзя поместить его после завершения WORD или в следующую строку. Например, команда

      
  • : Здесь строки, похожие на здесь документы, но предназначенные для одной строки. Они существуют только в порту Unix или rc (где он возник), zsh, некоторых реализациях ksh, yash и bash.

     команда 

    То, что задано как WORD , расширяется, и его значение передается в качестве ввода в команду . Это часто используется для передачи содержимого переменных в качестве входных данных в команду. Например:

      $ foo = "bar"
    $ sed 's/a/A/' 

Для закрытия или дублирования дескрипторов файлов можно использовать несколько других операторов ( > & - , x > & y x ). Для получения более подробной информации см. соответствующий раздел руководства по оболочке ( здесь , например, для bash).

Это относится только к наиболее распространенным операторам оболочек типа Борна. Некоторые оболочки имеют несколько собственных дополнительных операторов перенаправления.

Ksh, bash и zsh также имеют конструкции , > (...) и = (...) (последняя только в zsh ). Это не перенаправления, а замена процесса .

1
20.04.2014, 22:25
1 ответ

tmux имеет таблицу шаблонов escape-последовательностей в файле xterm-keys.c , так что он может поддерживать модифицированные специальные ключи в стиле xterm. Он соответствует этому шаблону:

        { '\t',         "\033[27;_;9~" },

вашей строке \ 033 [27; 5; 9 ~ , используя символ подчеркивания в качестве подстановочного знака. Таблица отображает escape-последовательности в вещи, о которых знает tmux :

  • специальные ключи, с control и shift модификаторами
  • другими ключами, где tmux игнорирует эти модификаторы

Обычно он переводит вашу escape-последовательность в символ табуляции , который вы можете не заметить (кроме, возможно, запуска завершения имени). Если вы удерживаете клавишу, вы заставите клавиатуру повторять достаточно быстро, чтобы tmux потерял счет времени и позволил отдельным байтам пройти (ограничение распознавания функциональных клавиш).

Если входящая escape-последовательность не соответствует одному из этих шаблонов и не найдена в списке специальных ключей из описания терминала, tmux , скорее всего, полностью отбросит ввод (может быть неправильно истолкован из-за для повторения клавиш и т. д.).

0
28.01.2020, 01:58

Теги

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