Закройте и перезапустите экран - в итоге обман!

Que AltShiftoes visto porxtermcomo un evento de pulsación de tecla paraocombinado con modificadores. La tecla Shift es un modificador predefinido en X, por ejemplo.

El recursotranslationsse 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.

2
07.03.2017, 00:53
1 ответ

Я заставил это работать с некоторыми изменениями:

#!/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

Другие элементы

  • Если вы хотите назвать свой экран на основе переменной $ SCR, вам необходимо использовать переключатель -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
]
1
27.01.2020, 22:19

Теги

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