3

У меня есть два пользователя; user1 и user2. У меня есть скрипт bash, запускаемый user1, который должен запустить команду на экранном терминале, запущенном user2. Предложения? Спасибо Макс

1 ответ1

4

Вы хотите, чтобы это выглядело так, как будто 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 в указанный файл.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .