X-Git-Url: https://git.hcoop.net/clinton/abcde.git/blobdiff_plain/9bbaac2a94aa608537a97978a87f173473f3fe7d..refs/heads/master:/abcde diff --git a/abcde b/abcde index 7b9bf5c..2792c69 100755 --- a/abcde +++ b/abcde @@ -1,6 +1,8 @@ #!/bin/bash # Copyright (c) 1998-2001 Robert Woodcock # Copyright (c) 2003-2006 Jesus Climent +# Copyright (c) 2009-2012 Colin Tuckley +# Copyright (c) 2012 Steve McIntyre <93sam@@debian.org> # This code is hereby licensed for public consumption under either the # GNU GPL v2 or greater, or Larry Wall's Artistic license - your choice. # @@ -13,7 +15,7 @@ # # $Id$ -VERSION='2.5.3' +VERSION='2.5.5-UNRELEASED' usage () { @@ -49,7 +51,7 @@ echo "-m Modify playlist to include CRLF endings, to comply with some player echo "-n No lookup. Don't query CDDB, just create and use template" echo "-N Noninteractive. Never prompt for anything" echo "-o " -echo " Output file type(s) (vorbis,mp3,flac,spx,mpc,wav,m4a). Defaults to vorbis" +echo " Output file type(s) (vorbis,mp3,flac,spx,mpc,wav,m4a,opus). Defaults to vorbis" echo "-p Pad track numbers with 0's (if less than 10 tracks)" echo "-P Use UNIX pipes to read+encode without wav files" echo "-q " @@ -431,8 +433,8 @@ getcddbinfo() gettracknum() { if [ -n "$STARTTRACKNUMBER" ] ; then - # Get the trackpadding from the current track - CURRENTTRACKPADDING=$(echo -n $UTRACKNUM | wc -c) + # Get the trackpadding from the current track, also trim whitespace for MacOSX + CURRENTTRACKPADDING=$(echo -n $UTRACKNUM | wc -c | tr -d ' ') TRACKNUM=$( printf %0.${CURRENTTRACKPADDING}d $(expr ${UTRACKNUM} + ${STARTTRACKNUMBER} - $FIRSTTRACK )) else TRACKNUM=${UTRACKNUM} @@ -513,6 +515,9 @@ do_replaygain() vorbis|ogg) OUTPUT=$OGGOUTPUTCONTAINER ;; + opus) + OUTPUT=$OPUSOUTPUTCONTAINER + ;; flac) OUTPUT=$FLACOUTPUTCONTAINER ;; @@ -785,6 +790,16 @@ echo ${id} return 0 } +print_genres () { + local len=${#CDGENRE[@]} + local i=0 + + for (( i=0; i < len ; i++)) + do + echo GENRE="${CDGENRE[$i]}" + done +} + # do_tag [tracknumber] # id3 tags a filename # variables used: @@ -822,13 +837,18 @@ do_tag () eyed3) # FIXME # track numbers in mp3 come with 1/10, so we cannot # happily substitute them with $TRACKNUM + # FIXME as well! # Older versions of eyeD3 (< 0.7.0) expect + # --set-encoding and --set-text-frame so perhaps some version + # sniffing would be useful. Might also be better to simply cut + # ties with the older eyeD3... Andrew. + # eyeD3 --comment syntax is also different in < and >= 0.7.0 run_command tagtrack-$OUTPUT-$1 nice $ENCNICE $TAGGER $TAGGEROPTS \ - --comment=::"$COMMENTOUTPUT" -A "$DALBUM" \ + --comment="$COMMENTOUTPUT" -A "$DALBUM" \ -a "$TRACKARTIST" -t "$TRACKNAME" -Y "$CDYEAR" \ -G "$GENREID" -n "${TRACKNUM:-$1}" \ - "${TRACKNUM:+-N $TRACKS}" \ - "${ENCODING:+--set-encoding=$ENCODING}" \ - "${TPE2:+--set-user-text-frame=TPE2:$TPE2}" \ + ${TRACKNUM:+-N "$TRACKS"} \ + ${ENCODING:+--encoding="$ENCODING"} \ + ${TPE2:+--text-frame=TPE2:"$TPE2"} \ "$ABCDETEMPDIR/track$1.$OUTPUT" ;; # FIXME # Still not activated... @@ -870,7 +890,7 @@ do_tag () echo DATE="$CDYEAR" fi if [ -n "$CDGENRE" ]; then - echo GENRE="$CDGENRE" + print_genres fi echo TRACKNUMBER=${TRACKNUM:-$1} if [ -n "$DISCNUMBER" ]; then @@ -896,6 +916,10 @@ do_tag () ;; esac ;; + opus) + run_command tagtrack-$OUTPUT-$1 true + ;; + flac) ( echo ARTIST="$TRACKARTIST" @@ -905,7 +929,7 @@ do_tag () echo DATE="$CDYEAR" fi if [ -n "$CDGENRE" ]; then - echo GENRE="$CDGENRE" + print_genres fi echo TRACKNUMBER="${TRACKNUM:-$1}" if [ -n "$DISCNUMBER" ]; then @@ -1016,6 +1040,9 @@ do_encode () vorbis|ogg) TEMPARG="PIPE_$OGGENCODERSYNTAX" ;; + opus) + TEMPARG="PIPE_$OPUSENCODERSYNTAX" + ;; flac) TEMPARG="PIPE_$FLACENCODERSYNTAX" ;; @@ -1023,7 +1050,7 @@ do_encode () TEMPARG="PIPE_$SPEEXENCODER" ;; mpc) - TEMPARG="PIPE_$MPPENCODER" + TEMPARG="PIPE_$MPCENCODER" ;; m4a) TEMPARG="PIPE_$AACENCODERSYNTAX" @@ -1058,6 +1085,9 @@ do_encode () vorbis|ogg) OUTPUT=$OGGOUTPUTCONTAINER ;; + opus) + OUTPUT=$OPUSOUTPUTCONTAINER + ;; flac) OUTPUT=$FLACOUTPUTCONTAINER ;; @@ -1113,6 +1143,32 @@ do_encode () ;; esac ;; + opus) + case "$2" in + %local*%) + case "$OPUSENCODERSYNTAX" in + opusenc) + + if [ "$(eval echo ${COMMENT})" != "" ]; then + case "$COMMENT" in + *=*) ;; + *) COMMENT="COMMENT=$COMMENT" ;; + esac + fi + # Tag the file at encode time, as it can't be done after encoding. + if [ "$DOTAG" = "y" ]; then + $RUN_COMMAND nice $EFFECTIVE_NICE $OPUSENCODER $OPUSENCODEROPTS --artist "$TRACKARTIST" --comment album="$DALBUM" --title "$TRACKNAME" --comment track="$1" --comment genre="$CDGENRE" --comment year="$CDYEAR" ${COMMENT:+--comment "$COMMENT"} "$IN" "$OUT" + else + $RUN_COMMAND nice $EFFECTIVE_NICE $OPUSENCODER $OPUSENCODEROPTS "$IN" "$OUT" + fi + ;; + esac + ;; + *) + $RUN_COMMAND nice $DISTMP3NICE $DISTMP3 $DISTMP3OPTS "$2" "$IN" "$OUT" >/dev/null 2>&1 + ;; + esac + ;; flac) case "$2" in %local*%) @@ -1143,16 +1199,16 @@ do_encode () ;; mpc) # MPP/MP+(Musepack) format (.mpc) is done locally, with inline - # tagging. - # I tried compiling the mppenc from corecodecs.org and got some - # errors, so I have not tried it myself. - ## FIXME ## Needs some cleanup to determine if an empty tag sent - ## FIXME ## to the encoder ends up empty. - $RUN_COMMAND nice $EFFECTIVE_NICE $MPPENCODER $MPPENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" --title "$TRACKNAME" --track "$1" --genre "$CDGENRE" --year "$CDYEAR" --comment "$COMMENT" "$IN" "$OUT" + # tagging. Uses mpcenc for Musepack SV8 encoding, changed from + # Musepack SV7 which used mppenc.... + $RUN_COMMAND nice $EFFECTIVE_NICE $MPCENCODER $MPCENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" --title "$TRACKNAME" --track "$1" --genre "$CDGENRE" --year "$CDYEAR" --comment "$COMMENT" "$IN" "$OUT" ;; m4a) # Tag the file at encode time, as it can't be done after encoding. - if [ "$DOTAG" = "y" ]; then + if [ "$AACENC" = "neroAacEnc" ] ; then + DOTAG=y + $RUN_COMMAND nice $ENCNICE $AACENC $AACENCOPTS -if "$IN" -of "$OUT" + elif [ ! "$DOTAG" = "y" ]; then $RUN_COMMAND nice $EFFECTIVE_NICE $AACENCODER $AACENCODEROPTS --artist "$TRACKARTIST" --album "$DALBUM" --title "$TRACKNAME" --track "$1" --genre "$CDGENRE" --year "$CDYEAR" --comment "$COMMENT" -o "$OUT" "$IN" else @@ -1395,6 +1451,9 @@ do_move () vorbis|ogg) OUTPUT=$OGGOUTPUTCONTAINER ;; + opus) + OUTPUT=$OPUSOUTPUTCONTAINER + ;; flac) OUTPUT=$FLACOUTPUTCONTAINER ;; @@ -1476,6 +1535,9 @@ do_playlist () vorbis|ogg) OUTPUT=$OGGOUTPUTCONTAINER ;; + opus) + OUTPUT=$OPUSOUTPUTCONTAINER + ;; flac) OUTPUT=$FLACOUTPUTCONTAINER ;; @@ -1703,7 +1765,7 @@ abcde.mkcue () { shift 2 echo REM DISCID $DISCID - echo FILE \""$CUEWAVEFILE"\" WAVE + echo FILE \""$CUEWAVFILE"\" WAVE if [ $1 -ne 150 ] && [ $MODE = "PREGAP" ] ; then OFFSET=$1 @@ -2398,6 +2460,9 @@ do_cddbstat () 2??) # Server responded, everything seems OK rc=0 ;; + *) # unknown error + break + ;; esac ;; esac @@ -2898,6 +2963,7 @@ do_cdread () # Add a variable to check if tracks are provided in command line and if not, use "0-" to rip the tracks READTRACKNUMS="$FIRSTTRACK-$LASTTRACK" ;; cdda2wav | icedax) READTRACKNUMS="$FIRSTTRACK+$LASTTRACK" ;; + pird) READTRACKNUMS="$FIRSTTRACK..$LASTTRACK" ;; *) echo "abcde error: $CDROMREADERSYNTAX does not support ONETRACK mode" exit 1 ;; esac @@ -2978,6 +3044,12 @@ do_cdread () else nice $READNICE $CDROMREADER -d "$CDROM" -v $UTRACKNUM "$FILEARG" fi ;; + pird) + if [ "$REDIR" = "y" ]; then + nice $READNICE $CDROMREADER -j ${READTRACKNUMS:-$UTRACKNUM} "$CDROM" "$FILEARG" + else + nice $READNICE $CDROMREADER -j ${READTRACKNUMS:-$UTRACKNUM} "$CDROM" "$PIPERIPPER_pird" > "$FILEARG" + fi ;; cddafs) # Find the track's mounted path REALTRACKNUM=$(expr $UTRACKNUM + 0) @@ -3144,9 +3216,10 @@ ENCODERSYNTAX=default MP3ENCODERSYNTAX=default OGGENCODERSYNTAX=default +OPUSENCODERSYNTAX=default FLACENCODERSYNTAX=default SPEEXENCODERSYNTAX=default -MPPENCODERSYNTAX=default +MPCENCODERSYNTAX=default AACENCODERSYNTAX=default NORMALIZERSYNTAX=default CUEREADERSYNTAX=default @@ -3194,17 +3267,18 @@ MP3ENC=mp3enc # ogg VORBIZE=vorbize OGGENC=oggenc +#opus +OPUSENC=opusenc # flac FLAC=flac # speex SPEEXENC=speexenc # mpp (Musepack) -MPPENC=mppenc +MPCENC=mpcenc # m4a AACENC=faac ID3=id3 -ID3V2=id3v2 EYED3=eyeD3 VORBISCOMMENT=vorbiscomment METAFLAC=metaflac @@ -3215,6 +3289,7 @@ CDPARANOIA=cdparanoia CDDA2WAV=icedax DAGRAB=dagrab CDDAFS=cp +PIRD=pird CDDISCID=cd-discid CDDBTOOL=cddb-tool MUSICBRAINZ=abcde-musicbrainz-tool @@ -3245,18 +3320,23 @@ MP3GAINOPTS="-a -k" VORBIZEOPTS= OGGENCOPTS= VORBISGAINOPTS="--album" +#opus +OPUSENCOPTS= # flac FLACOPTS= FLACGAINOPTS="--add-replay-gain" # speex SPEEXENCOPTS= # mpc -MPPENCOPTS= +MPCENCOPTS= # m4a AACENCOPTS= ID3OPTS= -ID3V2OPTS= +# FIXME # Older versions of eyeD3 (< 0.7.0) expect --set-encoding=utf16-LE +# so perhaps some version sniffing would be useful. Or perhaps it might be +# better to simply cut ties with the older eyeD3... Andrew. +EYED3OPTS="--encoding utf16" CDPARANOIAOPTS= CDDA2WAVOPTS= DAGRABOPTS= @@ -3281,10 +3361,10 @@ ACTIONS=cddb,read,encode,tag,move,clean # This option is basically for Debian package dependencies: # List of preferred outputs - by default, run with whatever we have in the path -DEFAULT_OUTPUT_BINARIES=vorbis:oggenc,flac:flac,mp3:toolame,mp3:lame,mp3:bladeenc,spx:speex,m4a:faac +DEFAULT_OUTPUT_BINARIES=vorbis:oggenc,flac:flac,mp3:toolame,mp3:lame,mp3:bladeenc,spx:speex,m4a:faac:opus # List of preferred cdromreaders - by default, run whichever we have in the path -DEFAULT_CDROMREADERS="cdparanoia icedax cdda2wav" +DEFAULT_CDROMREADERS="cdparanoia icedax cdda2wav pird" # List of quality levels associated with the encoders: DEFAULT_QUALITY_XLO="oggenc:-q -1,lame:-q 9,speex:--quality 1,m4a:" @@ -3307,6 +3387,8 @@ elif [ X$(uname) = "XDarwin" ] ; then # We should have diskutil in OSX, but let's be sure... NEEDDISKUTIL=y CDROMREADERSYNTAX=cddafs + # We won't find the eject program in OSX, and doing checkexec will fail further below... + unset EJECT elif [ X$(uname) = "XOpenBSD" ] ; then HTTPGET=wget MD5SUM=md5 @@ -3324,10 +3406,7 @@ else fi # If CDDBAVAIL is set to n, no CDDB read is done -# If USEID3 is set to n, no ID3 tagging is done CDDBAVAIL=y -USEID3=y -USEID3V2=y # There we go.. # But before we get into business, let us chop off any GREP environmental @@ -3371,6 +3450,8 @@ fi if [ "$CDROM" = "" ] ; then if [ -e /dev/cdroms/cdrom0 ]; then CDROM=/dev/cdroms/cdrom0 + elif [ "$OSFLAVOUR" = "OSX" ] && [[ $(diskutil list) =~ CD_part.*(disk.)$'\n' ]]; then + CDROM=/dev/${BASH_REMATCH[1]} elif [ -e /dev/cdrom ]; then CDROM=/dev/cdrom elif [ -e /dev/sr0 ]; then @@ -3381,8 +3462,6 @@ if [ "$CDROM" = "" ] ; then CDROM=/dev/acd0c elif [ -e /dev/disk1 ]; then CDROM=/dev/disk1 - elif [ "$OSFLAVOUR" = "OSX" ] && [[ $(diskutil list) =~ CD_part.*(disk.)$'\n' ]]; then - CDROM=/dev/${BASH_REMATCH[1]} fi fi @@ -3512,6 +3591,7 @@ if [ "$ONETRACK" = "y" ]; then flac) ;; cdparanoia) ;; cdda2wav | icedax) ;; + pird) ;; *) log error "$CDROMREADERSYNTAX does not support ONETRACK mode" exit 1 ;; esac @@ -3706,6 +3786,10 @@ case "$CDROMREADERSYNTAX" in CDROMREADER="$DAGRAB" CDROMREADEROPTS="$DAGRABOPTS" ;; + pird) + CDROMREADER="$PIRD" + CDROMREADEROPTS="$PIRDOPTS" + ;; cddafs) CDROMREADER="$CDDAFS" CDROMREADEROPTS="$CDDAFSOPTS" @@ -3729,10 +3813,11 @@ if echo "$OUTPUTTYPE" | grep ":" > /dev/null 2>&1 ; then for OUTPUT in "$(echo "$OUTPUTTYPE" | tr \ \|| tr , \ | tr \| \ )"; do case "$OUTPUT" in vorbis:*|ogg:*) OGGENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; + opus:*) OPUSENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; mp3:*) MP3ENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; flac:*) FLACENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; spx:*) SPEEXENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; - mpc:*) MPPENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; + mpc:*) MPCENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; m4a:*) AACENCODEROPTSCLI="$( echo $OUTPUT | cut -d: -f2- )" ;; esac done @@ -3744,7 +3829,7 @@ if echo "$OUTPUTTYPE" | grep ":" > /dev/null 2>&1 ; then fi # If nothing has been specified, use oggenc for oggs and lame for mp3s and flac -# for flacs and speexenc for speex and mppenc for mpps and faac for m4as +# for flacs and speexenc for speex and mpcenc for mpcs and faac for m4as # Getting ready for multiple output changes for OUTPUT in $(echo $OUTPUTTYPE | tr , \ ) @@ -3756,6 +3841,10 @@ do [ "$DOREPLAYGAIN" = "y" ] && NEEDVORBISGAIN=y OGGOUTPUTCONTAINER=ogg ;; + opus) + [ "$OPUSENCODERSYNTAX" = "default" ] && OPUSENCODERSYNTAX=opusenc + OPUSOUTPUTCONTAINER=opus + ;; mp3) [ "$MP3ENCODERSYNTAX" = "default" ] && MP3ENCODERSYNTAX=lame [ "$DOTAG" = "y" ] && NEEDTAGGER=y @@ -3772,7 +3861,7 @@ do # [ "$DOREPLAYGAIN" = "y" ] && ;; mpc) - [ "$MPPENCODERSYNTAX" = "default" ] && MPPENCODERSYNTAX=mppenc + [ "$MPCENCODERSYNTAX" = "default" ] && MPCENCODERSYNTAX=mpcenc [ "$DOREPLAYGAIN" = "y" ] && NEEDMPPGAIN=y ;; m4a) @@ -3832,6 +3921,12 @@ case "$OGGENCODERSYNTAX" in OGGENCODER="$OGGENC" ;; esac +case "$OPUSENCODERSYNTAX" in + opusenc) + OPUSENCODEROPTS="${OPUSENCODEROPTSCLI:-$OPUSENCOPTS}" + OPUSENCODER="$OPUSENC" + ;; +esac case "$FLACENCODERSYNTAX" in flac) FLACENCODEROPTS="${FLACENCODEROPTSCLI:-$FLACOPTS}" @@ -3856,10 +3951,10 @@ case "$SPEEXENCODERSYNTAX" in SPEEXENCODER="$SPEEXENC" ;; esac -case "$MPPENCODERSYNTAX" in - mppenc) - MPPENCODEROPTS="${MPPENCODEROPTSCLI:-$MPPENCOPTS}" - MPPENCODER="$MPPENC" +case "$MPCENCODERSYNTAX" in + mpcenc) + MPCENCODEROPTS="${MPCENCODEROPTSCLI:-$MPCENCOPTS}" + MPCENCODER="$MPCENC" ;; esac case "$AACENCODERSYNTAX" in @@ -3874,8 +3969,9 @@ if [ "$ID3TAGV" = "1" ]; then TAGGER="$ID3" TAGGEROPTS="$ID3OPTS" else - TAGGER="$ID3V2" - TAGGEROPTS="$ID3V2OPTS" + TAGGER="$EYED3" + TAGGEROPTS="$EYED3OPTS" + ID3SYNTAX=eyed3 fi # NOGAP is specific to lame. Other encoders fail ... @@ -3944,6 +4040,7 @@ fi if [ X"$CDSPEEDVALUE" != "X" ] && [ "$DOREAD" = "y" ]; then case "$CDROMREADERSYNTAX" in cdparanoia|debug) CDROMREADEROPTS="$CDPARANOIAOPTS -S $CDSPEEDVALUE" ;; + pird) CDROMREADEROPTS="$PIRDOPTS -s $CDSPEEDVALUE" ;; ### FIXME ### translate "cue2discid" from python to bash flac) NEEDMETAFLAC=y ; NEEDCUE2DISCID=y ; CDSPEEDVALUE="" ;; *) NEEDCDSPEED=y ;; @@ -3957,12 +4054,14 @@ fi PIPERIPPER_cdparanoia="-" PIPERIPPER_debug="-" PIPERIPPER_flac="-c " +PIPERIPPER_pird="-" # Encoders with USEPIPE support # FIXME # Include here all the encoders we can figure out support pipes PIPE_lame="-" PIPE_bladeenc="-" PIPE_oggenc="-" +PIPE_opusenc="-" PIPE_flac="-" # Figure out if we can use pipes with the ripper/encoder combination @@ -3974,12 +4073,14 @@ if [ "$USEPIPES" = "y" ]; then PIPEENCODERSVARCHECK="PIPE_$MP3ENCODERSYNTAX" ;; vorbis|ogg) PIPEENCODERSVARCHECK="PIPE_$OGGENCODERSYNTAX" ;; + opus) + PIPEENCODERSVARCHECK="PIPE_$OPUSENCODERSYNTAX" ;; flac) PIPEENCODERSVARCHECK="PIPE_$FLACENCODERSYNTAX" ;; spx) PIPEENCODERSVARCHECK="PIPE_$SPEEXENCODER" ;; mpc) - PIPEENCODERSVARCHECK="PIPE_$MPPENCODER" ;; + PIPEENCODERSVARCHECK="PIPE_$MPCENCODER" ;; esac decho "PIPERIPPERSVARCHECK: $( eval echo "\$$PIPERIPPERSVARCHECK" )" if [ "$( eval echo "\$$PIPERIPPERSVARCHECK" )" = "$" ] || \ @@ -4001,7 +4102,7 @@ fi # Make sure a buncha things exist for X in $CDROMREADER $CDDISCID ${NEEDTAGGER+$TAGGER} $MP3ENCODER \ - $OGGENCODER $FLACENCODER $SPEEXENCODER $MPPENCODER \ + $OGGENCODER $OPUSENCODER $FLACENCODER $SPEEXENCODER $MPCENCODER \ $AACENCODER $CDDBTOOL \ ${NEEDATOMICPARSLEY+$ATOMICPARSLEY} \ ${NEEDHTTPGET+$HTTPGET} ${NEEDDISTMP3+$DISTMP3} \ @@ -4089,7 +4190,7 @@ if [ "$DOCDDB" = "y" ]; then esac fi CHOICE=$(checkstatus cddb-choice) - if [ $CHOICE = 0 ] ; then + if [ "$CHOICE" = 0 ] ; then # We don't have any information at all; try to fall back # to CD-Text for basic information vecho "No CDDB information found, trying cdtext from the CD" @@ -4106,6 +4207,7 @@ fi if [ X"$CDSPEEDVALUE" != "X" ]; then case "$CDROMREADERSYNTAX" in cdparanoia|debug) ;; + pird) ;; flac) ;; *) do_cdspeed ;; esac @@ -4219,7 +4321,7 @@ post_read # We are now finished with the cdrom - it can be safely ejected. Note that # abcde will not have completed yet. -if [ "$EJECTCD" = "y" ] && [ -x $(which $EJECT) ]; then +if [ "$EJECTCD" = "y" ]; then # We check if the disk we are processing is actually the disk inside the # CD tray. If not, we do not eject the CD, since it might be so that the # user ejected it manually. @@ -4236,7 +4338,7 @@ if [ "$EJECTCD" = "y" ] && [ -x $(which $EJECT) ]; then $eject $EJECTOPTS $cd elif [ X"$(uname)" = X"Darwin" ] ; then diskutil eject ${CDROM#/dev/} 0 - else + elif [ -x $(which $EJECT) ]; then $EJECT $EJECTOPTS "$CDROM" fi #fi