У меня есть два пользователя; 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 в указанный файл.)