Что общего между средами в терминальном сеансе оболочки? - PullRequest
4 голосов
/ 13 марта 2010

У меня есть собственный сценарий оболочки, который запускается каждый раз, когда пользователь входит в систему или предполагается, что он идентифицирован, помещается в /etc/profile.d и выполняет некоторые основные операции с переменными env. Недавно я добавил некоторый код, так что если экран запущен, он будет подключен без необходимости что-либо печатать. Однако есть некоторые проблемы. Если я вхожу в систему как root, а su - другому пользователю, код запускается второй раз. Есть ли переменная, которую я могу установить, когда код запускается в первый раз, чтобы предотвратить повторный запуск кода?

Я думал что-то записать на диск, но потом я не хочу препятствовать запуску кода, если я начну новый сеанс терминала. Вот код, о котором идет речь. Сначала он пытается подключиться снова - если он неуспешен, потому что он уже подключен (как это может быть в прерванном сеансе), он «заберет» сеанс обратно.

screen -r

if [ -z "$STY" ]; then
    exec screen -dR
fi

В конечном счете, эта ошибка не позволяет мне подставить пользователя другому пользователю, потому что, как только я это сделаю, он захватывает сеанс экрана и возвращает меня туда, где я начал. Довольно разочаровывает

Ответы [ 2 ]

1 голос
/ 28 мая 2010

$ {PPID} оболочки, которую вы получите, когда будете использовать su, будет командой su. Так что вывод

ps -o command= $PPID

начнется с букв su, так что проверьте это.

0 голосов
/ 13 марта 2010

Я думаю, вы можете сделать это правильно, если вы прочитаете следующий пост (и человек для вашей любимой оболочки) Вопрос о входе в систему против профиля

...