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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: завершение программы (bash)  (Прочитано 3207 раз)

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

Оффлайн towa

  • Автор темы
  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
завершение программы (bash)
« : 08 Июня 2009, 16:13:54 »
Добрый день!
Есть скрипт:
#!/bin/bash
command1 | command2
RESULT = $?
echo $RESULT
if !RESULT
then killall command1
fi

command1 является консольной программой, а command2 - с окном. После закрытия окна приложения command2, command1 все еще в памяти остается. кроме того переход на строку RESULT = $? не происходит. (из-за конвейера??)
Как завершить программу command1?

Оффлайн Frank

  • Старожил
  • *
  • Сообщений: 1799
  • Профессиональный любитель
    • Просмотр профиля
    • Народный форум Николаева
Re: завершение программы (bash)
« Ответ #1 : 08 Июня 2009, 16:28:38 »
Команды выполняются последовательно. Если command1 не собирается завершать свою работу, дальнейшая работа всего скрипта не происходит. Можно вызывать её как "command1 &", тогда она будет запущенна в фоне, но проверка результата в данном случае бессмысленна, т.к. будет выполнена до завершения работы команды.

Оффлайн Alex_U

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: завершение программы (bash)
« Ответ #2 : 08 Июня 2009, 16:43:20 »
Один из вариантов решения -- именованый канал (конвеер)
Что-то вроде этого
#!/bin/bash
mkfifo /pipe #создаем именованный канал
command1 > /pipe & #пишем в него
command2 < /pipe #читаем из него
RESULT = $?
echo $RESULT
killall command1
эрэм эрэф /pipe

эрэм эрэф /pipe -- что то твориться то ли с моим FireFox, то ли с сайтом форума, должна быть команда удаления канала.
« Последнее редактирование: 08 Июня 2009, 16:48:12 от Alex_U »

Оффлайн towa

  • Автор темы
  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Re: завершение программы (bash)
« Ответ #3 : 08 Июня 2009, 20:21:59 »
Команды выполняются последовательно. Если command1 не собирается завершать свою работу, дальнейшая работа всего скрипта не происходит. Можно вызывать её как "command1 &", тогда она будет запущенна в фоне, но проверка результата в данном случае бессмысленна, т.к. будет выполнена до завершения работы команды.

Цитировать
5.3.2 Оператор &
Оператор & используется для того, чтобы организовать исполнение команд в фоновом режиме. Если поставить значок & после команды, то оболочка вернет управление пользователю сразу после запуска команды, не дожидаясь, пока выполнение команды завершится. Например, если задать в командной строке "command1 & command2 &", то оболочка запустит команду command1, сразу же затем команду command2, и затем немедленно вернет управление пользователю.

То, что нужно! =) спасибо. решено! =)

2Alex_U: попробовал и Ваш вариант.. не сработало что то... у второй команды есть параметры.
cmd1 > pipe &
cmd2 -param1 "value" "path" < pipe
влияет ли наличие параметров как то ?

 

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