This is eject.sh in view mode; [Download] [Up]
#!/bin/sh # # AUTHOR: Timothy J. Luoma # # EMAIL: luomat@capitalist.princeton.edu # 476tjl@ptsmail.ptsem.edu # # DATE: 21 Nov 1995 # # WARRANTY: " " (this space blank on purpose) # # PURPOSE: Allows (root) user to eject a disk at the # command-line. # # RULES FOR USE: Use at your own risk. This has only been tested # by me under limited, specific usage. Don't charge someone else # money for it. If you improve it, let me know. If you redistribute # it after improving it, please keep my name on their somewhere, # even if just to say "This idiot did this all wrong, so I fixed # it." # # SOME USAGE NOTES: # 1) Some error messages occur when I am eject a disk using this # script, but none of them seem to harm anything. # # 2) Usage: both 'umount' and 'disk -e' must be run by 'root', # unless root changes the execute permissions. Sorry. There are # obvious workarounds (SETUID root/chmod 4755 is what I did since # I'm the only user on my NeXTStation). # # 3) The 'umount' and 'disk -e' commands are done on ONE line, # connected by "&&" so that the 'disk -e' is done ONLY when the # 'umount' has already been done. This keeps the disk from being # ejected when it hasn't been umounted, which can be a real pain # in the compiler. # # 4) I use 'umount -v' which echoes when the disk is unmounted. # You can remove the '-v' if you don't like this. # # 5) If the script complains about not being able to find the # 'mount' command, either use the full path (usually /usr/etc/mount) # or add the foldername to the $PATH (but you knew that, didn't # you ;-) # # 6) This script assumes that your floppy disks are mounted on # '/dev/rfd0b' because this is where my 3.2 NeXTStation mounts # floppy disks. # # 7) CDs seem to be mounted in a way that makes little sense to me. # My CD drive is /dev/sd2a. Some CDs are mounted on /dev/sd2a # (most notab NeXT CDs), and some are mounted on /dev/rsd2h. # To account for this, I simply defined it as if there was an # additional drive which gets mounted on 'rsd2h'. # # 8) ONE VERY important note: to eject a disk using 'disk -e' you # need to reference the RAW device. That is, for /dev/sd2a I need # to use /dev/rsd2a. TO THAT END: When you define the drive # variables, you must use the regular device. THEN when you use # 'disk -e' you must use 'disk -e /dev/r$yourvariablename' # "WHY?" you ask. Because 'mount' reports the regular device, # while 'disk -e' requires the raw device. Hey, this is a l. # # 9) IF you can install another drive, I'm quite sure that you can # figure out how to add the eject code for it to this simple script. # I hope I have given a sufficiently useful road map on how this # can be done. # # 10) This entire script is a hack. It isn't meant to be particularly # pretty, it's just meant to allow you to eject a disk from the # commandline. # # # 11) Oh, once you have read this, you can remove the next few lines make the program actually work: # echo "You should read through the code first to make sure that you" # echo "know how this program works and what assumptions it operates" # echo "under or else it might not work, or not work how you think " # echo "it should work. USE AT YOUR OWN RISK!!!!" # exit 0 # end of sermon about reading the code before running the program. name=`basename $0` #################################################### # The FORMAT is important here. It is simply the part # # which comes after "/dev/". If you don't know it is, # # check 'mount -p' and look at the first field. Example:# # my floppy drive is /dev/rfd0b, so I use "rfd0b" # ########################################################## # This is where my floppies get mounted floppydrive=rfd0b floppy2=fd0a # this is where my NeXT CDs get mounted # NOTE: this is not the RAW device, # see BELOW for how this is handled. # see ABOVE for why this is a problem. otherdrive=sd2ais is where my non-NeXT CDs get mounted yadrive=rsd2h #################################### # the actual program begins here. # #################################### if [ $# -lt 1 ] then echo "<Usage> $name /diskname" exit 0 fi # check the mountpoint, ie, which /dev it is mounted on. # This is the first field in the 'mount -p' command. mounted=`mount -p | grep $1 | awk '{print $1}' | sed 's/\/dev\///'` ########################################################## # If the mountpoint is the floppydrive, eject the floppy # # drive # ########################################################## if [ "$mounted" = "$floppydrive" ] then umount -v $1 && disk -e /dev/$floppydrive elif [ "$mounted" = "$floppy2" ] then umount -v $1 && disk -e /dev/r$floppy2 ########################################################## # # # NOTE: This is a SPECIAL CASE. You need to use the RAW # # device here. # # # ########################################################## elif [ "$mounted" = "$otherdrive" ] then umount -v $1 && disk -e /dev/r$otherdrive # note the "r" ^ ########################################################## # if the mountpoint is the otherdrive, eject that. # ########################################################## elif [ "$mounted" = "$yadrive" ] then umount -v $1 && disk -e /dev/$yadrive ############################################################ # if the mountpoint is none of the above, don't try to # # eject it... You'd hate to dismount something by accident,# # like "/" ;-) # ############################################################ else echo "$name error: not a disk" fi #################################################################### # If you have TickleServices, then you have a command called # "WSNotify" which updates the File Viewer from the command-line, # much like "Update Viewer" in the WM menu. If you have it, this # would be a good place to invoke it, so the File Viewer will know # that the disk has been ejected. # NOTE: WSNotify only seems to work for me if the File Viewer is # not hidden. Your mileage may vary ;-) # If you have WSNotify, uncomment the next line. # WSNotify && echo "$name: Updated File Viewer" exit 0
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.