Как 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.
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.'