Неправильно выполняются некоторые команды по ssh (обновился)

Провел анализ трех файлов
1) локально выполнил скрипт (успешно)
2) залогинился по ssh и выполнил скрипт
ssh [email protected]
$ /home/xbmc/change_to_desktop.sh
(успешно)
3) дал команду по ssh
ssh [email protected] /home/xbmc/change_to desktop.sh

1 и 2 содержат почти одинковый набор переменных
( за исключением PPID, приглашение системы, и
SSH_CLIENT='192.168.1.101 47162 22'
SSH_CONNECTION='192.168.1.101 47162 192.168.1.100 22'
SSH_TTY=/dev/pts/0)

А вот 3 вариант, который меня и интересует имеет много отличий, скриншот прилагаю.

Все что выше EUID=1000 одинаково, потому и не показал.

А теперь главный вопрос, где прописать, чтобы программа по ssh выполнялась в стандартном окружении переменных, как будто я залогинился по ssh и выполнил команду???
PS. Пробовал запускать и так ssh [email protected] “/bin/bash /home/xbmc/change_to_desktop.sh”, но результат все тот же.
Убрал в скрипте &

$ cat change_to_video.sh
#!/bin/bash
F=/tmp/.X2-lock
&& read P < $F
if
then sudo chvt 9
else xinit /home/xbmc/start_video.sh – :2 vt9 &
fi

И скрипт стал выполняться удаленно, но меня это не устраивает, т.к. весь вывод передается на мою консоль, а мне с нее нужно опять этот скрипт запускать, чтобы он выполнял уже другие действия.
В принципе если запускать вот такой командой в бэкграунде, то консоль после этого свободна
ssh [email protected] /home/xbmc/change_to_desktop.sh &
А на удаленном компьютере выполняется вот такой скрипт
[[email protected] ~]$ cat change_to_desktop.sh
#!/bin/bash
set|sort > ~/env_list.sshexec_bash
F=/tmp/.X1-lock
[ -f $F ] && read P < $F
if [ -n "$P" -a -d "/proc/$P" ]
then sudo chvt 8
else xinit /usr/bin/enlightenment_start -- :1 vt8 
fi
То все работает.
насколько правильно что else xinit /usr/bin/enlightenment_start – :1 vt8 будет запущен не в бэкграунде ???
Если это нормальное поведение то по запуску моего скрипта все решено. Но открытый вопрос как исполнить команду по ssh в стандартной среде переменных, а не в урезанной версии.
Заэкспортировать?
Вот с такой строчкой в скрипте оно работает:
setsid xinit /usr/bin/enlightenment_start -- :1 vt8 &> /dev/null < /dev/null &
setsid позволяет запустить программу без привязки к терминалу, а “&> /dev/null < /dev/null” думаю, объяснений не требуют.
Так что дело не в переменных, а именно в том, что некоторые программы не переносят, когда “под ними” закрывается терминал. В данном случае программа изначально запускается без терминала.

В процессе проверки столкнулся с тем, что enlightenment через некоторое время виснет, но подозреваю, что это уже его проблемы.
Если я сделал, что работает без &, нужен ли он тогда вообще ???
Как хотите :)
Просто в вашем варианте оно работает, пока активен процесс ssh на вызывавшей машине и есть связь с ней по сети.
Обрыв/выключение/завершение процесса у вас – и рано или поздно (зависит от величины таймаута) терминал на удалённой машине умрёт, а с ним и enlightenment.
Не, такой расклад меня не устраивает, обрыв будет в любом случае.
setsid позволяет запустить программу без привязки к терминалу
Что плохого в этом методе?
Должнали вообще команда по ssh выполняться на каком то терминале?
И каким образом по ssh выполнить команду именно на 1 виртуальном терминале ?
Ну, я уже ответил на предыдущей странице, как это сделать.
setsid команда &> /dev/null < /dev/null &
запускает программу в полностью изолированном режиме. Без терминала.
Спасибо, уже использую, e17 падает не зависимо от того как его запускает
 
Зарегистрироваться или войдите чтобы оставить сообщение.