1 (14.05.2013 23:28:25 отредактировано Konstantin.Ivanov)

Доброго времени суток!

Есть два скрипта С1 и С2 (для краткости). С1 выполняется в терминале до определённого момента. В этот момент происходит логин другого пользователя из-под скрипта, и в его (этого другого пользователя) .bashrc внизу стоит запуск С2. С2 запускается - однако хотелось бы, чтоб вывод С2 был виден в том, же терминале, что и С1 - а его (вывода) нет вообще. С2 просто завершается (самоубийством через pkill - т.е. выход из оболочки этого пользователя) и продолжается С1. Всё выполняется нормально - только вот вывод С2 идёт куда-то мимо.

Хотелось бы отметить, что используется именно .bashrc, но вот как:

  • сначало происходит вход как обычно и считывается .bash_profile (вот он):

exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
  • как видно .bash_profile запускает оболочку, которая считывает .bashrc
    (все эти пляски с бубном для чистоты переменных окружения) (вот .bashrc):

set +h
umask 022
# экпорт переменных и прочее
# и прочее

# и собственно запуск скрипта С2 (скрипт на ruby)
ruby /path/to/script/С2.rb

Подскажите как направить вывод скрипта C2 на тот же терминал, в котором выполнялся С1 (ну в смысле вообще вывести на терминал) или, если это невозможно, хотя бы запустить его в отдельном терминале - так чтобы при его (скрипта) запуске выплывал отдельный терминал с его выводом.

P.S.: Дело в том, что если я выполняю скрипт С1 до момента логина, а потом ручками логинюсь под этого пользователя - то само собой запускается С2 и его вывод идёт на терминал - что не происходит при логине из-под скрипта С1. Хотелось бы автоматизировать этот момент, чтобы не крутить руками.

P.P.S: Может проще открыть отдельный терминал, но как?

2

Можно просто использовать файл для передачи данных (в каком терминале запущен первый скрипт) второй же скрипт выводит на этот терминал.

Команда tty возвращает адрес терминала в котором она запущена.

Пример решения:

скрипт1

#!/bin/bash

echo "$(tty)" >/tmp/my_tty

запуск второго скрипта с пере направлением вывода на терминал в котором запущен первый скрипт.

ruby /path/to/script/С2.rb >$(cat /tmp/my_tty)

3 (14.05.2013 23:44:33 отредактировано Konstantin.Ivanov)

ormorph⇓ пишет:

Можно просто использовать файл для передачи данных (в каком терминале запущен первый скрипт) второй же скрипт выводит на этот терминал.

А как быть с правами? Мне достаточно назначить права для файла /tmp/my_tty ?

Я проверил, он мне только что выдал

bash: /dev/pts/0: Permission denied

Как и какие права мне расширить? Я так понимаю мне нужно расширить права для записи для текущего терминала.

4 (15.05.2013 00:16:44 отредактировано Konstantin.Ivanov)

ormorph⇓ пишет:

Можно просто использовать файл для передачи данных (в каком терминале запущен первый скрипт) второй же скрипт выводит на этот терминал.

Спасибо разобрался! Изменение прав для /tmp/my_tty работает.  bp

# добавлено позже

Ан, нет. Это я поторопился. Если я под root выполняю

echo "$(tty)" >/tmp/my_tty

И меняю права /tmp/my_tty на 777, то из другого терминала команда

echo "Hello, Root" >$(cat /tmp/my_tty)

выведет на первый терминал сообщение "Hello, Root". Всё вроде бы правильно. Однако при запуске скрипта выдаёт ошибку описанную выше.
Причём даже при ручном логине, а не из скрипта. Права у /tmp/my_tty при этом -rwxrwxrwx

5

Можно добавить команду chmod 666, на терминал.
Либо попробовать добавить пользователя в группу tty, по крайней мере у меня так.

Посмотрите что показывает команда ls -l /dev/pts/0

6

Konstantin.Ivanov⇓ пишет:

Спасибо разобрался! Изменение прав для /tmp/my_tty работает. 

Ну и здорово )

ormorph⇓ пишет:

Либо попробовать добавить пользователя в группу tty, по крайней мере у меня так.

Отличное решение, даже с правами возиться не надо  bf
Все проверено - все работает отлично!

8

Konstantin.Ivanov пишет:
ormorph⇓ пишет:

Либо попробовать добавить пользователя в группу tty, по крайней мере у меня так.

Отличное решение, даже с правами возиться не надо  bf
Все проверено - все работает отлично!

А sudo нельзя использовать?

Alexey_1⇓ пишет:

А sudo нельзя использовать?

Первый скрипт под root'ом, однако второму - и скрипту и пользователю не хотелось бы выделять привилегий. Тем паче, что пользователь не в группе sudo - т.е. туда его надо добавлять, так получается, что проще всего - это сделать его членом группы tty и не париться с правами. Я опасаюсь давать ему много привилегий - скрипт С2 ещё не проверен, да и на скорую руку сделан.

10

Konstantin.Ivanov пишет:
Alexey_1⇓ пишет:

А sudo нельзя использовать?

Первый скрипт под root'ом, однако второму - и скрипту и пользователю не хотелось бы выделять привилегий. Тем паче, что пользователь не в группе sudo - т.е. туда его надо добавлять, так получается, что проще всего - это сделать его членом группы tty и не париться с правами. Я опасаюсь давать ему много привилегий - скрипт С2 ещё не проверен, да и на скорую руку сделан.

su - user -c 'бла-бла-бла'
man su