У меня есть два пользователя; user1 и user2. У меня есть скрипт bash, запускаемый user1, который должен запустить команду на экранном терминале, запущенном user2. Предложения? Спасибо Макс
1 ответ
Вы хотите, чтобы это выглядело так, как будто user2 набрал команду?
В случае screen вы можете использовать
screen -S user2/sessionname -p windowname -X stuff "~user1/somescript.sh
"
При этом текст ~user1/somescript.sh (ссылающийся на файл в домашнем каталоге user1) будет напечатан в определенном окне данного сеанса экрана и отправит символ новой строки.
(Да, второе " должно быть в новой строке, в противном случае вы просто отправили бы текст и должны были нажать клавишу возврата в сеансе экрана. В качестве альтернативы используйте $'stuff blah\n')
Для этого вам понадобится доступ на запись к user2/sessionname ; прочитайте справочную страницу экрана для описания multiuser и acladd .
В общем случае "запустить материал на другом tty" вы можете использовать writevt /dev/pts/X sometext ; Инструмент writevt является частью пакета console-tools . Если ваш дистрибутив использует вместо kbd , получите writevt.c . Это специфично для Linux.
Или вы просто хотите, чтобы user2 видел вывод?
./somescript.sh >& /dev/pts/X
где /dev/pts/X - это tty-устройство, которое принадлежит экрану пользователя user2.
Вам понадобится доступ для записи; это может быть передано user2 с помощью chmod/setfacl, или вы можете использовать sudo .
(>& file эквивалентен > file 2>&1 , который перенаправляет как stdout, так и stderr в указанный файл.)
