У вас обратная логика. Гарантируется, что любая строка будет либо отличной от LOCAL
, либо отличной от REMOTE
, потому что строка не может быть LOCAL
и REMOTE
одновременно.
Здесь подходящим инструментом для этой задачи является case
оператор (, который является стандартным sh
синтаксисом, противоположным этим [[...]]
операторам ksh):
case $TYPE in
(REMOTE|LOCAL|BOTH) ;; # OK
(*) printf >&2 'Error...\n'; exit 1;;
esac
Если вы хотите использовать [[
, в ksh
или bash
или zsh
в эмуляции ksh
, вы можете сделать:
if [[ $TYPE != @(REMOTE|LOCAL|BOTH) ]]; then
printf >&2 'Error...\n'
exit 1
fi
Или [[ $TYPE != REMOTE && $TYPE != LOCAL && $TYPE != BOTH ]]
или [[ ! ($TYPE = REMOTE || $TYPE = LOCAL || $TYPE = BOTH) ]]
и т. д.
Или с помощью стандартной [
команды:[ "$TYPE" != REMOTE ] && [ "$TYPE" != LOCAL ] && [ "$TYPE" != BOTH ]
.
С ksh93
, bash
или zsh
другой вариант — использовать ассоциативный массив:
typeset -A allowed_TYPE
allowed_TYPE=([REMOTE]=1 [LOCAL]=1 [BOTH]=1)
if ((!allowed_TYPE[\$TYPE])); then
printf >&2 'Error...\n'
exit 1
fi
(пункт \
в \$TYPE
важен, чтобы избежать появления уязвимостей при выполнении произвольных команд).
С помощью zsh
вы также можете использовать простой массив:
allowed_TYPE=(REMOTE LOCAL BOTH)
if ((! $allowed_TYPE[(Ie)$TYPE]))...
Программа wodim
была создана группой враждебно настроенных -УСС в мае 2004 г. с целью обмана пользователей. wodim
не получали исправлений с августа 2004 г., хотя существует множество сообщений об ошибках -в отношении этого конкретного варианта программного обеспечения, поэтому не используйте его.
Вам лучше использовать оригинальное программное обеспечение cdrtools
и программу cdrecord
, и вы должны знать, что неразумно вызывать cdrecord
с такими аргументами, как dev=/dev/sr0
, когда вы работаете в Linux, поскольку Linux реализует несколько конкурирующих драйверов. разного качества для одного и того же оборудования, доступного в одно и то же время, и dev=/dev/sr0
обычно требует использования наихудших из существующих драйверов. Если вы используете официально задокументированный синтаксис для dev=
, cdrecord
может автоматически выбрать лучший доступный драйвер вместо этого, и если у вас есть только один оптический привод на вашей машине, cdrecord
даже автоматически обнаруживает правильный интерфейс самостоятельно, если вы опускаете dev=
полностью.
По вашим пожеланиям лучше всего звонить:
cdrecord -minfo
, так как здесь перечислены все треки и все связанные сеансы с их номерами. Возможно, вам придется поэкспериментировать, чтобы узнать, есть ли в вашей ОС смещение -на -одна проблема с номером сессии с опцией mount
.
Обратите внимание, что опция -minfo
была добавлена в ноябре 2006 года, поэтому вам нужна достаточно свежая версия cdrecord
... Некоторые недружественные дистрибутивы Linux могли не обновлять свое программное обеспечение с тех пор. Gentoo, Arch, Suse,... — это несколько дружественных дистрибутивов Linux с программным обеспечением от -до -.
Может представлять интерес тот факт, что оригинальное программное обеспечение более чем удвоило свой исходный код и набор функций с 2004 года, когда враждебные люди OSS создали форк, который вы используете.
Если ваш дистрибутив является одним из недружественных дистрибутивов, получите последний исходный код в schilytools изhttp://sourceforge.net/projects/schilytools/files/и скомпилируйте его, просто вызвав make
.
Позвольте мне добавить фрагменты типичного вывода с мульти--сеансового компакт-диска, увиденного в сети в результате вызова cdrecord -minfo -v
:
ATIP start of lead out: 359847 (79:59/72)
...
Track Sess Type Start Addr End Addr Size
==============================================
1 1 Data 0 299 300 -1
2 2 Data 11702 21333 9632 11402
3 3 Data 28236 78091 49856 6902
4 4 Blank 84994 359844 274851 6902
Last session start address: 28236
Last session leadout start address: 78092
Next writable address: 84994
Remaining writable size: 274851
Кстати, :последний столбец без заголовка представляет собой размер конечной области после записанных данных. Размер первой конечной области составляет 11402 сектора, размер других выходных областей имеет уменьшенный размер 6902 сектора.
В данном случае на диск записано 3 сеанса. Упомянутая в списке 4-я сессия — это оставшееся свободное место на носителе.
Наконец, позвольте мне добавить комментарий к необоснованным претензиям, часто встречающимся против оригинального cdrtools
, где люди утверждают, что у cdrtools
предположительно есть проблема с лицензией. Юридический отдел Sun Microsystems, Oracle и SUSE, а также Эбен Моглен провели глубокий анализ и подтвердили, что никогда не было проблем с лицензией на оригинал cdrtools
.