Функция Bash для чтения ввода данных пользователем ИЛИ прерывания на тайм-ауте

Как don_crissti предложенный, я пропускал ключ WMCLASS в рамках своей .desktop записи. Без этого DM (здесь beign Gnome3.6) не удалось соответствовать окнам вместе с указанной записью меню. Средство запуска теперь собирает в группу все последующие экземпляры Eclipse теперь.

Из того, что я читал о .desktop спецификации файла, здесь, который является дополнительно дополнительным ключом, указанным во время процесса запуска, обеспечивает идентификатор для соответствия другому связанному верхнему уровню (родитель?) окна с:

WMCLASS

      a string to match against the "resource name" or "resource
      class" hints. If this key is present, the launchee will most
      likely not send a "remove" message on its own. If the
      desktop environment detects a toplevel window mapped with
      this name or class, it should send a "remove" message for 
      the startup sequence.

И далее на в рамках документа:

StartupWMClass=STRING

Если это правда, ИЗВЕСТНО, что приложение отобразит по крайней мере одно окно с данной строкой как ее класс WM или подсказка имени WM.

4
20.03.2015, 11:38
1 ответ

read имеет параметр таймаута, вы можете использовать:

read -t 3 answer

Если вы хотите, чтобы read ждал одного символа (по умолчанию целая строка + Enter), вы можете ограничить ввод до 1-го символа:

read -t 3 -n 1 answer

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

if [ $? == 0 ]; then
    echo "Your answer is: $answer"
else
    echo "Can't wait anymore!"
fi

Думаю, нет необходимости реализовывать фоновые задания в вашей ситуации, но если вы хотите, вот пример:

#!/bin/bash

function ProcessA() {
    sleep 1  # do some thing
    echo 'A is done'
}

function ProcessB() {
    sleep 2  # do some other thing
    echo 'B is done'
}

echo "Starting background jobs..."

ProcessA &  # spawn process "A"
pid_a=$!    # get its PID

ProcessB &  # spawn process "B"
pid_b=$!    # get its PID too

echo "Waiting... ($pid_a, $pid_b)"
wait  # wait for all children to finish

echo 'All done.'
11
27.01.2020, 20:47

Теги

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