У меня точно такая же надоедливая проблема. Поскольку я не нашел никакого решения, я использую этот простой скрипт bash в качестве обходного пути
#!/usr/bin/bash
while [[ $(dmesg | tail -n 3 | grep ETPS) == "" ]]
do
sudo modprobe --remove psmouse
sudo modprobe psmouse
sleep 3
done
notify-send "Touchback" "Your touchpad is back ready to use"
exit
И, конечно же, было бы неплохо настроить sudoers
так, чтобы он не запрашивал пароль для команды two.
Добавьте амперсанд (и )после вашей команды в сценарии оболочки, чтобы запустить сценарий в фоновом режиме, т.е.:
#!/bin/bash
echo "type something"
read text
command $text &
Вышеизложенное является рудиментарным примером того, что я имею в виду.
Если вы уже запустили скрипт, Ctrl + Z приостановит его, а затем bg
возобновит его, но в фоновом режиме.
Если какая-либо команда, которую вы выполняете, будет выводить данные в выносной блок, она выведет их на консоль даже во время работы в фоновом режиме. Вам нужно будет передать стандартный вывод, чтобы он этого не делал. Ввод fg
выведет фоновый процесс на передний план.
Самый простой способ сделать это — нажать Ctrl + Z(приостановить выполнение скрипта )после того, как вы закончите ввод входных данных, а затем bg
который отправит скрипт в фоновом режиме и продолжить его выполнение. Затем вы можете использовать текущий сеанс оболочки в обычном режиме.
Однако лучшим подходом является изменение сценария таким образом, чтобы он не требовал ввода данных пользователем. Просто передайте любой ввод, который вам нужен, в качестве аргументов при запуске скрипта. Это сделает вашу жизнь и жизнь ваших пользователей проще.
Например, вместо этого:
#!/bin/bash
echo "Give me the first number! "
read num1
echo "Give me the second number! "
read num2
Используйте это:
#!/bin/bash
num1=$1
num2=$2
И запустите свой скрипт следующим образом (, где 10
и 30
— это примеры номеров, которые будут сохранены как num1
и num2
соответственно):
script.sh 10 30 > out 2>err&
Таким образом, сценарий будет немедленно отправлен в фоновый режим, любой вывод будет перенаправлен в файл с именем out
, а все сообщения об ошибках — в файл с именем err
. Все параметры были настроены во время запуска, и дальнейшее взаимодействие не требуется.
Как правило, по возможности избегайте того, чтобы сценарии требовали ввода данных пользователем. Необходимость вводить данные для подачи сценария трудоемка, подвержена ошибкам, ее гораздо сложнее автоматизировать, а также усложняет повторение той же операции позже.
Вы не думали открыть еще одно окно оболочки? Я был бы очень удивлен, если бы вам пришлось использовать терминал VT -100 или аналогичный, они уже давно вышли из моды.
Для этого я предлагаю использовать терминальные мультиплексоры типа tmux
или screen
. Используя их, вы можете запускать свою программу в фоновой консоли и время от времени проверять ее вывод или делать уведомления в случае какой-либо активности на консоли с вашей программой. Или даже запустите его в отдельной панели и просмотрите вывод своей программы, выполняя другую работу в другой панели.