Que AltShiftoes visto porxterm
como un evento de pulsación de tecla paraocombinado con modificadores. La tecla Shift es un modificador predefinido en X, por ejemplo.
El recursotranslations
se puede utilizar para asignar varias combinaciones de teclas/modificadores a una cadenaque se envía a xterm. Puede hacer que esa cadena sea "cualquier" secuencia de caracteres (¡sin modificadores! ), y sucede antes de que xterm vea los eventos de pulsación de tecla.
En su archivo.Xresources, anularía o modificaría las combinaciones de teclas mediante una configuración de -líneas múltiples que comenzaría con
*VT100*translations: #override \n\
y las encuadernaciones en líneas sucesivas. La secciónCombinaciones de teclas predeterminadasdel manual de xterm tiene ejemplos.
Я заставил это работать с некоторыми изменениями:
#!/bin/bash set -o nounset # set -o errexit # trap 'echo "Aborting due to errexit on line $LINENO. Exit code: $?" >&2' ERR set -o errtrace set -o pipefail SCR="bunny" SCRIPT="/home/../run.sh" function main() { if find_screen $SCR >/dev/null; then close_screen start_script fi } function start_script { echo "Starting script with new screen" screen -d -m -S $SCR sh $SCRIPT } function close_screen { if find_screen $SCR >/dev/null; then echo "Found! Deleting $SCR" screen -S $target_screen -X quit fi } function find_screen { result=$(screen -ls "$1" | grep -o "^\s*[0-9]*\.$1[ "$'\t'"](" --color=NEVER -m 1 | grep -oh "[0-9]*\.$1" --color=NEVER -m 1) if [ -z $result ]; then echo "$1" return 1 else echo $result return 0 fi } target_screen=$(find_screen $SCR) main "$@"
set -o errexit trap 'echo "Aborting due to errexit on line $LINENO. Exit code: $?" >&2' ERR
Эти строки мешали вашему оператору return 1
в функции find_screen
close_screen
screen -S -X $ target_screen quit
потребовалась небольшая модификация: screen -S $ target_screen -X quit
для соответствия переключателям с соответствующие параметры. Оператор if
в функции find_screen
никогда не возвращал значение true, поэтому я немного обновил его, добавив переменную results
, присвоив ее исходному тесту. состояние. Итоговое обновление выглядит следующим образом:
result=$(screen -ls "$1" | grep -o "^\s*[0-9]*\.$1[ "$'\t'"](" --color=NEVER -m 1 | grep -oh "[0-9]*\.$1" --color=NEVER -m 1) if [ -z $result ]; then echo "$1" return 1 else echo $result return 0 fi
Другие элементы
-S
, как на экране -d -m -S $ SCR
... и добавить любые другие параметры и переключатели по желанию.
start_script
похоже, что вы пытаетесь использовать переключатель -t
вместо -S
на экране - d -m -t $ SCR sh $ SCRIPT
- в соответствии с вашим описанием « создать новый сеанс экрана с именем SCRIPT » вы должны использовать -S
для настройки экрана имя сеанса. Вы можете объединить это с -t
, чтобы задать имя окна, поскольку в сеансе экрана может быть несколько окон: screen -d -m -S $ SCR -t
WindowName1