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


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: bash определить вставлен ли лоток в cdrom  (Прочитано 1449 раз)

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

Оффлайн Bloodlettinger

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

изначально прочитал ман по eject , там написанно что при удачном извлечении или вставке лотка в сдром на вывод команды приходит 1 или 0, долго проверял при разных условиях, но команда echo $(eject /dev/cdrw) всегда на вывод пустую строку выдает.

на хом убунте реализовал так, как только в /media появляется какой то каталог, значит диск вставлен (авто подмонтируется), работает для рв дисков, сдр таким образом не подмонтируются.

далее пробовал $(cat /dev/cdrw) считать в переменную, в случае если cat: /dev/cdrw1: No medium found, значит диск не вставлен, спим 30 сек и ждем, cat: /dev/cdrw1: No medium found это не возврат кат, и считать этот вывод в переменную у меня не получается. наставьте на пусть истинный плз, подскажите как организовать данную проверку на баше.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: bash определить вставлен ли лоток в cdrom
« Ответ #1 : 07 Февраля 2011, 12:31:39 »
изначально прочитал ман по eject , там написанно что при удачном извлечении или вставке лотка в сдром на вывод команды приходит 1 или 0, долго проверял при разных условиях, но команда echo $(eject /dev/cdrw) всегда на вывод пустую строку выдает

Принцип такой:
$ eject -V
eject версии 2.1.5, Jeff Tranter (tranter@pobox.com)

$ echo $?
0

$ eject
eject: не удаётся найти или открыть устройство для `cdrom'

$ echo $?
1

Оффлайн Bloodlettinger

  • Автор темы
  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: bash определить вставлен ли лоток в cdrom
« Ответ #2 : 07 Февраля 2011, 12:40:34 »
#!/bin/bash

echo $?

$(eject /dev/cdrw)

echo $?
sleep 5
$(eject -t /dev/cdrw)

echo $?
на вывод дает
0
0
0
что я неправильно делаю?
если в консоле последовательно выполняю команды, то эффект тот же
--
логика была такой, до тех пор пока результат eject равен 0 слип на минуту и снова провека, как только результат операции 1, сразу eject -t и пишем следующий диск. может способ не самый изящный? может можно как то прочитать снять инфу о том, что вставлено в привод в данный момент?
« Последнее редактирование: 07 Февраля 2011, 12:45:56 от Bloodlettinger »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: bash определить вставлен ли лоток в cdrom
« Ответ #3 : 07 Февраля 2011, 12:45:40 »
Надо просто понять смысл кода возврата команды:
0 -- успешное выполнение;
1 -- ошибка (устройство занято, устройство не существует...)

Оффлайн Bloodlettinger

  • Автор темы
  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: bash определить вставлен ли лоток в cdrom
« Ответ #4 : 07 Февраля 2011, 12:48:45 »
Надо просто понять смысл кода возврата команды:
0 -- успешное выполнение;
1 -- ошибка (устройство занято, устройство не существует...)
он 1 не возвращает никогда, если лоток задвинут, выдвигает и возвращает 0, если лоток выдвинут, то ничего не делает и возвращает 0
т.е
#!/bin/bash

echo $?

$(eject /dev/cdrw)
sleep 5
echo $?

$(eject /dev/cdrw)
sleep 5
echo $?

$(eject /dev/cdrw)
sleep 5
echo $?
возвращает
0
0
0
0
« Последнее редактирование: 07 Февраля 2011, 12:50:34 от Bloodlettinger »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: bash определить вставлен ли лоток в cdrom
« Ответ #5 : 07 Февраля 2011, 12:53:38 »
он 1 не возвращает никогда

1 -- ошибка (устройство занято, устройство не существует...)

$ eject bla-bla-bla
eject: не удаётся найти или открыть устройство для `bla-bla-bla'

$ echo $?
1

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
« Последнее редактирование: 07 Февраля 2011, 13:13:42 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Bloodlettinger

  • Автор темы
  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: bash определить вставлен ли лоток в cdrom
« Ответ #7 : 07 Февраля 2011, 14:24:22 »
Можно использовать cdrecord.
http://www.linuxquestions.org/questions/linux-hardware-18/cdrom-tray-status-673073/

или вот еще вариант:
http://www.unixresources.net/linux/lf/3/archive/00/00/08/50/85099.html
спасибо, 1й вариант пробоал уже, но есть 1 минус, при выполнении cat /dev/cdrw он сразу автоматом задвигает лоток, т.к каждая проверка в цикле, это cat проверка и сразу eject , если проверка каждые 30 сек и про диск забыли, то он за час 120 раз залезет\вылезет, это плохо. а вот второй способ вроде бы хорош, надо потестить. еще раз спасибо

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: bash определить вставлен ли лоток в cdrom
« Ответ #8 : 07 Февраля 2011, 14:58:23 »
Еще в /sys/devices/pci0000:00/0000:00:1f.5/host2/target2:0:0/2:0:0:0/block/sr0 куча всяких битов и байтов про дисковод.

В Вашей системе пути могут быть немного другими.
На эту директорию есть ссылки
/sys/class/block/sr0
/sys/block/sr0
« Последнее редактирование: 07 Февраля 2011, 15:04:44 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

 

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