Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Помогите с созданием скрипта (РЕШЕНО)  (Прочитано 2753 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Kraggash

  • Автор темы
  • Любитель
  • *
  • Сообщений: 59
    • Просмотр профиля
Здравствуйте, нужен простой скрипт для последовательного запуска команд. У меня к сожалению пока знаний не хватает, прошу помочь.
На самом деле все не сложно, все команды при запуске отрабатывают свою задачу, но мне нужно чтобы все происходило по запуску одного скрипта и желательно пасс рута вводить только один раз.
Первая команда:
sudo rfcomm connect 0Ввожу пароль.
Подключает параллельный порт к моему девайсу и терминал остается висеть (кстати можно или нет эту команду исполнить в фоне).

Вторая команда:
sudo killall gpsd
sudo gpsd -N -D 3 -b /dev/rfcomm0
Ввожу пасс.
Демон gpsd начинает выдавать информацию в терминале (тут я в курсе как запустить фоном, но логи пока хочется наблюдать).

Третья команда:
xgpsТретья должна запускатья после удачного запуска двух предыдущих.

Это все. Если посдовательно запускать команды, или исполнять три скрипта подряд, все срабатывает как мне нужно, хотелось бы все собрать в единое целое.  :)
Заранее спасибо.
« Последнее редактирование: 22 Декабря 2010, 12:10:45 от Kraggash »

Оффлайн БТР

  • Заслуженный пользователь
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6296
    • Просмотр профиля
Re: Помогите с созданием скрипта
« Ответ #1 : 21 Декабря 2010, 16:15:11 »
а в чём проблема записать всё в один скрипт и запускать его от sudo?

Оффлайн Kraggash

  • Автор темы
  • Любитель
  • *
  • Сообщений: 59
    • Просмотр профиля
Re: Помогите с созданием скрипта
« Ответ #2 : 21 Декабря 2010, 16:39:45 »
Так пасс два раза вводить нужно, потом каждая команда запускает под себя консоль. Одна консоль запустилась с sudo rfcomm connect 0 и ждет... Если её завершить, соединение рвется, и запускается вторая консоль с gpsd. А нужно чтобы утилиты обе работали, одновременно.

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Помогите с созданием скрипта
« Ответ #3 : 21 Декабря 2010, 16:49:03 »
можно запускать их в xterm-е.

sudo  xterm -e rfcom conntect 0
sudo xterm -e

Но я пока не вижу очевидного способа проверить удачность запуска.
Просто анализ кодов возврата и простой конвейер из "&&" не поможет, т.к. приложения еще не завершились, и их кодов возврата просто нет. К тому же, xterm в любом случае запустится и код возврата будет "нет ошибки".

Что меняется в системе после запуска этих двух утилит?
Может, какие-то файлы появляются?

Поищите, что можно проверить и по какому критерию определить удачность запуска.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн БТР

  • Заслуженный пользователь
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6296
    • Просмотр профиля
Re: Помогите с созданием скрипта
« Ответ #4 : 21 Декабря 2010, 16:50:41 »
Одна консоль запустилась с sudo rfcomm connect 0 и ждет... Если её завершить, соединение рвется, и запускается вторая консоль с gpsd. А нужно чтобы утилиты обе работали, одновременно.

то, где вы набираете команды, называется "эмулятор терминала".

rfcomm connect 0 &

Оффлайн Kraggash

  • Автор темы
  • Любитель
  • *
  • Сообщений: 59
    • Просмотр профиля
Re: Помогите с созданием скрипта
« Ответ #5 : 21 Декабря 2010, 17:56:01 »
Прошу прощения, действительно я имел ввиду эмулятор терминала, по привычке назвал gnome-terminal консолью.
Я получил подсказку в виде rfcomm connect 0 &Значит должно получиться что то такое?

#!/bin/bash
rfcomm connect 0 &
killall gpsd &
gpsd -N -D 3 -b /dev/rfcomm0 &
xgps
Выдало
kraggash@lenovo:~$ sudo ./gps
Can't connect RFCOMM socket: Device or resource busy
gpsd: launching (Version 2.94)
gpsd: listening on port gpsd
gpsd: running with effective group ID 0
gpsd: running with effective user ID 0
gpsd: stashing device /dev/rfcomm0 at slot 0
gpsd: Received terminating signal 15. Exiting...
xgps запустилась с ошибкой "gpsd is not running"  Может быть нужна пауза между командами? Да, и нет лога gpsd.

Пользователь решил продолжить мысль 21 Декабря 2010, 18:44:35:
Создал два скрипта:
1. rfcomm с содержанием
#! /bin/bash
sudo rfcomm connect 0
Запускаю в Наутилусе, выбирая "Запустить в терминале". Ввожу пароль. В итоге окно эмулятора терминала с содержанием
Connected /dev/rfcomm0 to 00:0d:b5:38:49:bc on channel 1
Press CTRL-C for hangup
Отлично!

2. gpsd_start с содержанием
#!/bin/bash
sudo killall gpsd
sudo gpsd -N -D 3 -b /dev/rfcomm0
Запускаю из Наутилуса, выбирая "Запустить в терминале". Ввожу пароль.
Получаю окно эмулятора с логами GPS
Замечательно!

Запускаю xgps ... работает!

Вопрос:
Как мне добиться такого же результата, запуском одного скрипта? То что советовали выше пробовал с разными модификациями, может и должно работать, но не работает, кроме того не появляется окно с логами GPS. Такое ощущение, что пока коннектится rfcomm, gpsd демон успевает увидеть, что /dev/rfcomm0 не существует и зависает.  Есть мысль, что необходима какая то задержка между командами. Повторю, по отдельности и по очереди все запускается так как мне и нужно.  :-[
« Последнее редактирование: 21 Декабря 2010, 19:50:19 от Kraggash »

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Помогите с созданием скрипта
« Ответ #6 : 21 Декабря 2010, 20:02:19 »
Как мне добиться такого же результата, запуском одного скрипта? То что советовали выше пробовал с разными модификациями, может и должно работать, но не работает, кроме того не появляется окно с логами GPS. Такое ощущение, что пока коннектится rfcomm, gpsd демон успевает увидеть, что /dev/rfcomm0 не существует и зависает.  Есть мысль, что необходима какая то задержка между командами. Повторю, по отдельности и по очереди все запускается так как мне и нужно.  :-[

Так я и говорю, разберитесь, что меняется  в системе после запуска каждой команды.
Что конкретно делает rfcomm?
Девайс создает? Если да, вставьте в скрипт цикл с проверкой и задержкой. Что-то типа
while [ ! -f /dev/rfcommm0 ] ; do
  sleep 2s
done

Если нет, ищите дальше.
Есть утилита strace, которая покажет все системные вызовы.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Kraggash

  • Автор темы
  • Любитель
  • *
  • Сообщений: 59
    • Просмотр профиля
Re: Помогите с созданием скрипта
« Ответ #7 : 21 Декабря 2010, 20:18:35 »
Как мне добиться такого же результата, запуском одного скрипта? То что советовали выше пробовал с разными модификациями, может и должно работать, но не работает, кроме того не появляется окно с логами GPS. Такое ощущение, что пока коннектится rfcomm, gpsd демон успевает увидеть, что /dev/rfcomm0 не существует и зависает.  Есть мысль, что необходима какая то задержка между командами. Повторю, по отдельности и по очереди все запускается так как мне и нужно.  :-[

Так я и говорю, разберитесь, что меняется  в системе после запуска каждой команды.
Что конкретно делает rfcomm?
Девайс создает? Если да, вставьте в скрипт цикл с проверкой и задержкой. Что-то типа
while [ ! -f /dev/rfcommm0 ] ; do
  sleep 2s
done

Если нет, ищите дальше.
Есть утилита strace, которая покажет все системные вызовы.
rfcomm connect 0  создает COM-порт и подключает к нему мой GPS приемник. А gpsd это демон, который выводит информацию с этого COM-порта на терминал или в программу. Это все что я знаю  :coolsmiley: И я не программист. Вставить скрипт в цикл с проверкой и задержкой, что то типа ... это я не понимаю, к сожалению. Согласитесь, если бы я умел программировать, с этим я справился бы сам и не надоедал бы на форуме.

P.S. Упрощаю задачу.
Есть скрипт А и скрипт В. Оба скрипта при запуске создают свою сессию в терминале.
Задача создать скрипт С, который запустит оба эти скрипта, сначала А, затем В, с задержкой 5 секунд и двумя терминальными сессиями. Это возможно на bash написать?
« Последнее редактирование: 21 Декабря 2010, 20:27:34 от Kraggash »

Оффлайн scsiman

  • Активист
  • *
  • Сообщений: 344
    • Просмотр профиля
Re: Помогите с созданием скрипта
« Ответ #8 : 22 Декабря 2010, 11:10:10 »
Что-то типа (под рукой нет шелла, чтобы проверить, man xterm):
#!/bin/sh
xterm -e A &
sleep 5
xterm -e B &

Возможно, придётся добавить вызов шелла к xterm'у.
Dell Studio XPS 16, Ubuntu 16.04 LTS (Home).
HP nx6110, Ubuntu 8.04 LTS => 10.04 LTS (Home).

Оффлайн Kraggash

  • Автор темы
  • Любитель
  • *
  • Сообщений: 59
    • Просмотр профиля
Re: Помогите с созданием скрипта
« Ответ #9 : 22 Декабря 2010, 11:34:22 »
Что-то типа (под рукой нет шелла, чтобы проверить, man xterm):
#!/bin/sh
xterm -e A &
sleep 5
xterm -e B &

Возможно, придётся добавить вызов шелла к xterm'у.
:D
Ура! Ура! Ура!
Огромное спасибо!
Ваш скрипт сработал, запускал несколько раз для проверки  :)
#!/bin/sh
xterm -e rfcomm connect 0 &
sleep 5
killall gpsd
xterm -e gpsd -N -D 3 -b /dev/rfcomm0 &
sleep 5
xgps
Спасибо большое, это то что мне было нужно. Очень полезное дело, скриптописание... Буду изучать.  :)
Теперь я могу прямо в машине нажимать забинденную кнопку на ноуте и у меня включится GPS навигатор.

Еще раз спасибо всем, вопрос решен. :)

 

Страница сгенерирована за 0.032 секунд. Запросов: 25.