Code Sample |
#!/bin/bash # # build_debmenu.sh - Creates a Fluxbox Debian submenu with menu items for # all Debian packages that add an entry into the # /usr/lib/menu directory # Rev 1 6/01/05 # by cbagger01 from the DSL forums # Copy the existing fluxbox menu file and strip out # the old debmenu submenu entries and save to a temp file cat $HOME/.fluxbox/menu | grep -v debmenu > /tmp/oldmenu # Find the line number directly above the (Apps) submenu linenum=`awk '/\(Apps\)/ { print NR }' /tmp/oldmenu` let "prevnum = linenum - 1" # Create the first part of the new menu file sed -n '1,'$prevnum'p' /tmp/oldmenu > /tmp/newmenu # Create the Debian fluxbox submenu entry echo " [submenu] (Debian) {} # debmenu" >> /tmp/newmenu # Collect the Debian Menu titles # Our Debian friends do not use a consistent delimiter method for the # title value. If the title contains spaces, it is enclosed in quotes and # the delimiters are START: title=" and END: " but if the title doesn't # contain spaces, then no quotes are used and the delimiters # are START: title= and END: blankspace # This sed script will parse out the title values properly regardless # of the method used inside each menu file cat /usr/lib/menu/* 2> /dev/null | \ sed -e 's/.*longtitle//' \ -e 's/.*title=\([^"]*\) .*/title=\1/g' \ -e 's/.*title="\([^"]*\)".*/title=\1/g' \ -n -e 's/title=//p' > /tmp/titles # Collect the Debian Menu commands # The same issue exists with the command value because some command strings # will contain spaces, for example "/bin/ls -al" cat /usr/lib/menu/* 2> /dev/null | \ sed -e 's/.*command=\([^"]*\) .*/command=\1/g' \ -e 's/.*command="\([^"]*\)".*/command=\1/g' \ -n -e 's/command=//p' > /tmp/commands # Loop through each title / command pair and build a menu entry i=1 total=`awk 'END { print NR }' /tmp/titles` while [ "$i" -le $total ];do title=`sed -n "$i"p /tmp/titles` command=`sed -n "$i"p /tmp/commands` # Create the new fluxbox menu entry echo " [exec] ($title) {$command} # debmenu" >> /tmp/newmenu let "i+=1" done # Close out the Debian fluxbox submenu echo " [end] # debmenu" >> /tmp/newmenu # Add the rest of the old menu to the end of our new menu sed -n $linenum',$p' /tmp/oldmenu >> /tmp/newmenu # This script may be running effective as root under sudo # If so, figure out the real user name realuser= if [ -z "$SUDO_USER" ]; then realuser=$USER else realuser=$SUDO_USER fi # Change the menu file permissions if real user is not root if [ "$realuser" != "root" ]; then chown $realuser:staff /tmp/newmenu fi # Replace the fluxbox menu file with our newly built file mv /tmp/newmenu $HOME/.fluxbox/menu # Clean up old temp files rm -rf /tmp/oldmenu rm -rf /tmp/titles rm -rf /tmp/commands exit |