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


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

Автор Тема: bash. из одного файла последовательно запустить команды  (Прочитано 4153 раз)

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

Оффлайн karlson2

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
подскажите пожалуйста как запустить последовательность команд часть в одном терминале, затем часть в другом и ещё одну команду из третьего

общая задача - соединиться с bluetooth GPS приёмником, а затем запустить TangoGPS/Foxtrot (что-то навроде Google Earth).

сейчас у меня есть 3 (три) запускные файла, которые надо запускать последовательно и при этом пароль вводить

1
sudo rfcomm bind rfcomm0
sudo rfcomm release 0
sudo rfcomm connect 0

2
sudo killall gpsd
sudo gpsd -N -D 3 -b /dev/rfcomm0

3
tangogps

все эти строки в один запускной файл просто так не поместить, потому как "sudo rfcomm connect 0" и "sudo gpsd -N -D 3 -b /dev/rfcomm0" требуют себе отдельные терминалы терминалы.
то еть после запуска первого файла (1) остаётся занятым терминал и потом после запуска второго (2) файла остаётся занятым другой терминал.

вопрос: как все эти строки уместить в один запускной файл (в данной последовательности) и то ли через nohup и &, то ли путём перевода на другой терминал заставить эту конструкцию функционировать?
....
nohup sudo rfcomm connect 0 &
....
nohup sudo gpsd -N -D 3 -b /dev/rfcomm0 &
....

не срабатывает
« Последнее редактирование: 01 Апреля 2012, 18:44:18 от karlson2 »

Оффлайн di-erz

  • Активист
  • *
  • Сообщений: 364
  • Не ангел, крыльев нету...
    • Просмотр профиля
    • Sanaviron
gnome-terminal -e КОМАНДА , только терминал сразу после выполнения команды закрывается
Большинство проблем от невнимательности, остальные от лени..
[Acer Aspire 5738G, ATI Mobility Radeon HD 4570, Ubuntu 12.04 LTS]
[HP ENVY m6-1106er AMD A10-4600M, Radeon HD 7660G/7670M, Ubuntu 14.04.2]

Оффлайн karlson2

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
так что ли предлагаете?

sudo rfcomm bind rfcomm0
sudo rfcomm release 0
gnome-terminal -e sudo rfcomm connect 0
sudo killall gpsd
gnome-terminal -e sudo gpsd -N -D 3 -b /dev/rfcomm0
tangogps

так не работает, пишет "Не удалось  определить аргументы: Неизвестный параметр -N"

или имелось в виду забить это в окно запуска программ (alt+F2)?   (Ubuntu 10.04)

и кстати, после строки "sudo rfcomm connect 0" возможна пауза понадобиться, для того, что бы он подсоединиться успел? прежде чем за следующую команду возьмётся

есть ли другие идеи?

Оффлайн honeybeer

  • Любитель
  • *
  • Сообщений: 92
    • Просмотр профиля
screen -d -m -S name1 ./скрипт1.sh
screen -d -m -S name2 ./скрипт2.sh
и т.д.
посмотреть процесс выполнения можно с помощью screen -r
« Последнее редактирование: 01 Апреля 2012, 22:08:15 от honeybeer »
ASUS Sandy/Ivy Bridge + PCI = Nobody cares
Ciao mina-san

Оффлайн di-erz

  • Активист
  • *
  • Сообщений: 364
  • Не ангел, крыльев нету...
    • Просмотр профиля
    • Sanaviron
Команды в одинарные кавычки завернуть ''
Большинство проблем от невнимательности, остальные от лени..
[Acer Aspire 5738G, ATI Mobility Radeon HD 4570, Ubuntu 12.04 LTS]
[HP ENVY m6-1106er AMD A10-4600M, Radeon HD 7660G/7670M, Ubuntu 14.04.2]

Оффлайн karlson2

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
в общем-то и тот и тот способы заработали, единственно сейчас что хотелось бы как-то подправить:

в способе

sudo rfcomm bind rfcomm0
sudo rfcomm release 0
gnome-terminal -e 'sudo rfcomm connect 0'
sudo killall gpsd
gnome-terminal -e 'sudo gpsd -N -D 3 -b /dev/rfcomm0'
tangogps

уж дюже быстро окна всплывают и в них надо же как-то успеть в правильной последовательности пароль ввести, нет ли какого аналога pause в bash (что бы я нерасторопно успевал пароли вводить) или может как-то в самом файле пароль указать (понимаю, не умно), что бы два раза пароль не вводить или как-то исхитриться, не указывая явно пароля внутри



в способе с

screen -d -m -S name1 ./скрипт1.sh
screen -d -m -S name2 ./скрипт2.sh

эта штукенция начинает работать только после того, как в каждый из терминалов зайду и пороли введу, а после с задержкой в секунд 30 tangogps начинает сигнал получать (но это не смертельно, но настораживает слегка). Может в этом варианте возможно что бы он как-то сначала у меня пароли запросил, а уже после уходил в подполье работать? Или на крайний случай может из-под Root-а запускать это?

Однако уже и на том спасибо обоим!!

есть ли какое соображение на этот счёт? лучше бы конечно как-то пароли не вводить в каждое окно, потому а ну как у меня там 10 строк которые пароля захотят или и того больше. И супостату не каждому такое пожелаешь.

Оффлайн honeybeer

  • Любитель
  • *
  • Сообщений: 92
    • Просмотр профиля
в скрипты sudo не стоит писать, лучше уж от рута запускать весь скрипт
в скрипте можно исполнять команды от имени обычного пользователя с помощью su -c "/usr/bin/do something" username
ASUS Sandy/Ivy Bridge + PCI = Nobody cares
Ciao mina-san

Оффлайн karlson2

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
... в скрипте можно исполнять команды от имени обычного пользователя с помощью su -c "/usr/bin/do something" username

вроде как не равноценно: исполнять просто из под root или из под оболочки root, но с командой
su -c "/usr/bin/do something" username

к примеру:

# gedit /etc/fstab                      есть возможность редактировать

# su -c 'gedit /etc/fstab' username     нет возможности редактировать


если кому ещё понадобиться, то работает следующими способами (через sudo):

1: Работает из одного запускного файла (недостаток - три терминала открывается, но это зато - возможность потом корректно закрыть команды через Ctrl+C)

rfcomm bind rfcomm0
rfcomm release 0
gnome-terminal -e 'rfcomm connect 0' &
killall gpsd
gnome-terminal -e 'gpsd -N -D 3 -b /dev/rfcomm0' &
gnome-terminal -e 'su -c tangogps username' &


2: Три файла в папке плюс в том, что открыто только одно окно терминала. Однако вызвать screen -r уже не выходит, соответственно корректно завершить команды не представляется возможным

файл 1: (1)

rfcomm bind rfcomm0
rfcomm release 0
rfcomm connect 0


файл 2: (2)

killall gpsd
gpsd -N -D 3 -b /dev/rfcomm0


файл 3: - запускной (startGPS)

screen -d -m -S name1 ./1
screen -d -m -S name2 ./2
su -c tangogps USERNAME
« Последнее редактирование: 02 Апреля 2012, 22:07:06 от karlson2 »

Оффлайн honeybeer

  • Любитель
  • *
  • Сообщений: 92
    • Просмотр профиля
Ну правильно, т.к. обычный юзер не может посмотреть сессии screen, запущенные root'ом. Нужен рутовый терминал.
(Нажмите, чтобы показать/скрыть)
P.S. может, оформит всех ваших демонов как init-скрипт?
ASUS Sandy/Ivy Bridge + PCI = Nobody cares
Ciao mina-san

Оффлайн karlson2

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
"P.S. может, оформит всех ваших демонов как init-скрипт?"

имеется в виду наподобии этого: http://habrahabr.ru/post/141003/ ? Думаю не стоит из блутуф GPS-а демона делать,

всё-таки он нужнен раз от разу, а не всегда да и сам GPS приёмник включается только когда необходим.

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Рута автозапуск место /etc/rc.local или /etc/init.d/<autoscript>
А поьзователь стучить на рута, команд mkfifo и cat чтения постоять рута, тогда
ползователь стучиться команд echo "ok" > рута встали.
Тест пример.
1. Терминал первую скрипт запустить от рута.
#!/bin/bash
sos=/tmp/f1
mkfifo $sos
chmod 777 $sos
while true
do
au=`cat $sos`
if [ "$au" == "ok" ];then
echo "`date` ROOT BUM"
fi
done
запустить рута sudo <скрипт>

2 Открой второй терминал от пользователь
echo "ok" > /tmp/f1запустил и смотри первую терминал кто пишет рута.))
« Последнее редактирование: 07 Апреля 2012, 12:16:41 от victor00000 »
Wars ~.o

Оффлайн karlson2

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
ээ.. даже не знаю что сказать

из кода понял что надо скрипт поместить в /etc/rc.local или /etc/init.d/, после чего если я однажды введу в консоли echo "ok" > /tmp/f1 (то есть в файл занесётся ОК), то дальше то ... то, что я не понял:  echo "`date` ROOT BUM"

этот РУТ БУМ наверное моя команда? И что за date, и при чём тут echo?

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
karlson2,
Автозагрузка пользователь echo "ok" > /tmp/f1 где положил "Запускаемые приложения"
------------
Авто рута /etc/rc.local Менять строк echo "`date` ROOT BUM" на какие включить программа у тебя
пример gnome-terminal -e "sudo rfcomm connect 0; read"

« Последнее редактирование: 09 Апреля 2012, 07:04:04 от victor00000 »
Wars ~.o

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Закрыто.

 

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