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

Здравствуйте, после обновления системы pacman -Syu неправильно работает команда запуска X сервера, если ее запускать по ssh.
На машинах лежат ключи ssh, так что они общаются без пароля.
С удаленной машины на другую удаленную машину выполняется команда:
ssh [email protected] xinit `which /home/xbmc/start_video.sh` – :2 vt9 &
Эта команда начинает выполяняться, я вижу как мерцает экран, но start_video.sh не запускается, вместо него срабатывает .xinitrc, в котором прописан запуск xbmc.
Но если зайти на этот компьютер ssh [email protected]
и
там выполнить xinit `which /home/xbmc/start_video.sh` – :2 vt9 &
то все отлично работает.
Что за хрень? Вообще не пойму!!
1) Команда which вам в данном случае не нужна.
which принимает как аргумент имя программы, ищет его по путям, указанным в $PATH, как это делает оболочка, и возвращает полный путь к программе, если его нашла. Например,
$ which openbox
/usr/bin/openbox
Поэтому, если вы впишете в командную строку
xxx `which openbox` yyy
, то вместо обратных кавычек будет сделана подстановка результата команды в кавычках, то есть получится
xxx /usr/bin/openbox yyy
А вот вписывать после which и в обратных кавычках УЖЕ ГОТОВЫЙ ПОЛНЫЙ ПУТЬ – бессмысленно. Его надо писать просто так, без кавычек и which

2) Опция (два минуса) для многих программ служит признаком конца “чужих” опций и начала “своих”. Например, когда вы пишете
startx /usr/bin/openbox -- :2 vt9
, то всё, что после это опции startx, а не openbox. Повидимому, аналогично ведёт себя и ssh, который тоже позволяет вписать в свою командную строку другую команду со своими опциями, и – означает конец этих опций и начало опций ssh.
Поэтому, чтобы ssh не хватал их командной строки чужие опции, попробуйте ВСЮ команду, которую вы хотите выполнить через ssh, взять “вот в такие кавычки”. А если не моможет – ‘вот в такие’.
Спасибо, частично помогло, теперь удаленно я могу выполнить команду
ssh [email protected] "xinit /home/xbmc/start_video.sh -- :2 vt9"
Но вот в чем прикол эта команда у меня вызывается из скрипта, т.е. на самом деле я к серверу обращаюсь так

ssh [email protected] /home/xbmc/change_to_video.sh
В этом скрипте происходит выбор действий, если Х не запущен то запустить, если запущен то просто переключиться
[[email protected] ~]$ cat change_to_video.sh
#!/bin/bash
F=/tmp/.X2-lock
[ -f $F ] && read P < $F
if [ -n "$P" -a -d "/proc/$P" ]
then sudo chvt 9
else xinit /home/xbmc/start_video.sh -- :2 vt9 &
fi
И вот в скрипте уже кавычки не поставишь, или есть способо поставить кавычки и выполнить команду ???
Natrio а откуда ты столько знаешь, я тоже хочу, можно ссылку на литературу по линукс.
А зачем в этом скрипте кавычки? Кавычки тут ни при чём.
Скрипт выполняется, как и написано.
Если что-то происходит не так, это вопрос уже к разнице в поведении терминала (что вряд ли), или (что скорей всего) в переменных окружения.
Когда вы логинитесь и запускаете шелл, устанавливается довольно много этих переменных, и некоторых, повидимому, очень не хватает при запуске этого скрипта “просто так”, отдельно.

Чтобы долго не гадать, можно найти различия экспериментально. Команда set без параметров выводит список всех переменных со значениями, команда sort поможет отсортировать строки по алфавиту (в данном случае как раз по именам переменных) для облегчения сравнения. То есть, в начало скрипта вставьте строку
set|sort > ~/env_list.alone
и выполните его через ssh. А потом поменяйте на
set|sort > ~/env_list.shell
и выполните “вручную”.

Теперь можно получить список отличий:
cd ~
diff env_list.alone env_list.shell
, и уже среди него искать недостающие переменные.

Что касается литературы по линуксу вообще, и по bash в частности, то её легко найти в сети – как “для общего развития”, так и по каждому конкретному вопросу, если задать его гуглу. Ну и некоторый опыт обычно помогает определить направление, куда копать, что искать и какие вопросы задавать поисковикам :)
1. По шеллу - ABSG
2. У вас иксы в 9 терминале пускаются сами? Всмысле вы это не настраивали? Просто дефолтненько vt7 используется…
PoZiTPoH
1. По шеллу - ABSG
2. У вас иксы в 9 терминале пускаются сами? Всмысле вы это не настраивали? Просто дефолтненько vt7 используется…
Как же не настраивал, у меня иксы запускаются и на vt7 и на vt8 и на vt9 (такая интересная трехиксовая система). Медиакомбайн делаю.
А вот и настройки xinit /home/xbmc/start_video.sh – :2 vt9

Natrio попробую Ваш вариант.
Объясните еще одну вещь, когда я выполняю команду локально - переменные окружения одни, а когда удаленно, то уже какой то другой набор переменных, откуда берутся другие? ssh их создает что ли ? или подключившись по ssh команда выполняется вообще в другой среде переменных? Я думал, что подконектившись на удаленный терминал я использую теже настройки, что и локально на той машине.
SSH - это туннель, шифрующий данные (в сильнейшем упрощении). Он запускает еще один экземпляр shell-процессора (bash, zsh и прочие *sh) на удаленной стороне. Оттуда и берутся настройки ;)
PoZiTPoH
SSH - это туннель, шифрующий данные (в сильнейшем упрощении). Он запускает еще один экземпляр shell-процессора (bash, zsh и прочие *sh) на удаленной стороне. Оттуда и берутся настройки ;)
Теперь все ясно. спасибо.
PoZiTPoH
По шеллу - ABSG
Это ещё я могу угадать, что сие расшифровывается как “Advanced Bash-Scripting Guide”, а гугл в ответ на такую аббервиатуру только всякую порнографию пишет :)
Natrio
PoZiTPoH
По шеллу - ABSG
Это ещё я могу угадать, что сие расшифровывается как “Advanced Bash-Scripting Guide”, а гугл в ответ на такую аббервиатуру только всякую порнографию пишет :)
У меня первая ссылка про библию.
Вчера посмотрел первую лекцию от yandex по информационным технологиям. ОЧень познавательно
http://company.yandex.ru/academic/kit/
 
Зарегистрироваться или войдите чтобы оставить сообщение.