Conky-Builder Package
KeySnatcher Package
Multi-Monitor Package
Nasup Package
Theme Repair tool
Thumbos Package
Tmrename Package
Mp4tomp3 Package
Wallscan Package
Introduction:
I am going to attempt to document programs I have written most are unaware of that are under the hood of virtually all Ultimate Edition operating systems. Software I have released to the internet are licensed under GPL feel free to edit / re-write anything I have released to date as you see fit. This particular page I am going to write about the ultimate-edition-code-cleanup package.
These programs can be accessed from the command-line interface (CLI). The programs from the ultimate-edition-code-cleanup package are written in BASH & Ruby, however I am fluent in many languages. I am unsure if that is the way to word that statment when talking about programming languages

Bash-Script-Maker:
The above Gedit plugin will generate a bash script skelaton if you will to get you started writing scripts, this suits 2 purposes:
1. To get you started writing your script instantly saving hours of time.
2. Education (a great place for newbs to learn bash scripting)
I have considered extending this to include a wizard like interface injecting commonly used functions. Wow am I lazy when it comes to coding right? No, I try to live by the rule why re-create the wheel. It would also accelerate application development.
CODE CLEANUP:
Back to the CLI. I'm going to start with my personal favorite code-cleanup it is written in Ruby. Why my favorite? No-one is perfect & I am a sloppy programmer. I do not bother indenting etc. This tool not only makes your code look pretty it will point out errors. These errors are displayed as indentions. If you write software in bash this tool is absolutly a must have. I am first going to provide an example of code with errors before and after the tool has ran across it. The below is bogus code, chroot detection should be done from udev and / or checking against inode 2. Beyond the scope of this post.
Before:
#!/bin/bash
#Ultimate Edition Customizations preinst for Ultimate Edition 3.7
set -e
IUSER=${SUDO_USER:-$USER}
IHOME="/home/$IUSER"
case "$1" in
configure)
echo "Checking for chroot environment."
if [ $IUSER != 'root' ]; then
echo "No chroot environment detected, removing."
abort-remove
echo "Done."
else
echo 'Root user / chroot environment detected.'
if test -f /etc/skel/examples.desktop; then
rm -R /etc/skel/examples.desktop
fi
if test -f /root/.bash_history; then
rm -f /root/.bash_history
fi
echo "VERSION Detected: $version"
if [ -n "$version" ] \
&& dpkg --compare-versions "$version" lt "2.7"; then
config_source=$(gconftool-2 --get-default-source)
tmp_dir=$(mktemp -t -d gconf.XXXXXXXXXX)
HOME="$tmp_dir" gconftool-2 --direct \
-config-source="$config_source" \
--recursive-unset \
/apps/panel/default_setup \
>/dev/null
kill -s HUP `pidof gconfd-2` >/dev/null 2>&1 || true
rm -rf "$tmp_dir"
rm /var/crash/* > 2 &1 /dev/null
glib-compile-schemas /usr/share/glib-2.0/schemas/
update-gconf-defaults
fi
;;
esac
exit 0
- Code: Select all
theemahn@JackHammer:~/Music/ultimate-edition-customizations-3.7_all/DEBIAN$ code-cleanup postinst
Error: indent/outdent mismatch: 1.
theemahn@JackHammer:~/Music/ultimate-edition-customizations-3.7_all/DEBIAN$
This means a done or fi etc. is missing somewhere in the code where the indention is missing is typically where the error lies let's examine the code. This board does not handle tabs very well lets look at a screenshot.
After:
Let's build a manual for it:
- Code: Select all
theemahn@JackHammer:~/Videos$ repostorm --fix ultimate-edition-code-cleanup_1.7.2-1_all
Relaxing permissions
Relaxing: ultimate-edition-code-cleanup_1.7.2-1_all
Process complete. Execution Time: 0s.
Scanning for errors / warnings to fix in ultimate-edition-code-cleanup_1.7.2-1_all.
W: ultimate-edition-code-cleanup: binary-without-manpage bin/bashdepends
W: ultimate-edition-code-cleanup: binary-without-manpage bin/code-cleanup
Fixing Error: No Manpage - Writing Generic manpage. please review and change if necessary.
Setting homepage as: http://ultimateedition.info/
Scanning for manpages errors.
Warning: W: ultimate-edition-code-cleanup: binary-without-manpage bin/bashdepends
Processing: bashdepends
Warning: W: ultimate-edition-code-cleanup: binary-without-manpage bin/code-cleanup
Processing: code-cleanup
Manpage issue(s) fixed.
Errors / warnings fixed: 1
theemahn@JackHammer:~/Videos$ theemahn@JackHammer:~/Videos$ repostorm --build ultimate-edition-code-cleanup_1.7.2-1_all
Code for multi-builds to achieve perfection will enter here.
=============================================================
Beginning build of ultimate-edition-code-cleanup_1.7.2-1_all
=============================================================
Relaxing permissions of ultimate-edition-code-cleanup_1.7.2-1_all
Cleaning up any tmp or backup files.
Setting individual file permissions to 644.
Scanning /etc to build conffiles.
Scanning for executables in ultimate-edition-code-cleanup_1.7.2-1_all Stage 1.
ultimate-edition-code-cleanup_1.7.2-1_all/bin/bashdepends
ultimate-edition-code-cleanup_1.7.2-1_all/bin/code-cleanup
ultimate-edition-code-cleanup_1.7.2-1_all/usr/share/gedit/plugins/externaltools/tools/new-bash
Scanning for executables in ultimate-edition-code-cleanup_1.7.2-1_all Stage 2.
Calculating Installed size & inserting into control file if necessary.
ultimate-edition-code-cleanup_1.7.2-1_all is 104. Control file reporting: 88
Size Mismatch, replacing with 104.
Calculating MD5SUMS in ultimate-edition-code-cleanup_1.7.2-1_all
Setting ownership to root in ultimate-edition-code-cleanup_1.7.2-1_all
Setting individual folder permissions to 755.
Setting permissions rights for control etc.
Building of ultimate-edition-code-cleanup_1.7.2-1_all
dpkg-deb: building package `ultimate-edition-code-cleanup' in `ultimate-edition-code-cleanup_1.7.2-1_all.deb'.
Lintian resulting package ultimate-edition-code-cleanup_1.7.2-1_all.deb.
We have built a totally perfect deb.
Recursively removing ultimate-edition-code-cleanup_1.7.2-1_all since we have a perfect deb.
Moving ultimate-edition-code-cleanup_1.7.2-1_all.deb to .debs/
We have had 100% error warning free deb(s) built this session.
theemahn@JackHammer:~/Videos$
Pretty straight forward I guess:
code-cleanup 1.7.2-1, 10/23/2013
GNU code-cleanup home page: <http://www.repostorm.com/>.
E-mail bug reports to: <[email protected]>.
Be sure to include the word code-cleanup somewhere in the Subject: field.
usage: code-cleanup [BASH SCRIPT] or "-" for stdin.
This package will eventually be a dependancy in repostorm as well repairtheme. Code-cleanup application was originally written by Paul Lutus under GPL in 2008 for doing the same thing to Ruby scripts. I have re-written it to do the same to bash scripts. Let's get some code out there already:
- Code: Select all
#!/usr/bin/ruby -w
# ==============================================================================
# title :code-cleanup
# description :Bash code cleanup script
# author :Glenn Cady <[email protected]>
# date :10/23/2013
# version :1.7.2-1
# usage :code-cleanup --help
# manual :man code-cleanup
# notes :See change-log below for further information.
# ==============================================================================
# Change-log: 1.7.1-8: re-wrote all code for cleaning up bash instead of ruby
# 1.7.2-1: Cleaned code and added stamping routine.
# ==============================================================================
# Original code: Copyright (C) 2008, Paul Lutus under GPL
PVERSION = '1.7.2-1'
BUILDDATE = "10/23/2013"
CCAUTHOR = "Glenn Cady <[email protected]>"
AUTHOR= ENV['USER']
WEBSITE = "http://ultimateedition.info/"
module RBeautify
# user-customizable values
RBeautify::TabStr = "\t"
RBeautify::TabSize = 1
# indent regexp tests
IndentExp = [
/^module\b/,
/^class\b/,
/^if\b/,
/(=\s*|^)until\b/,
/^unless\b/,
/(=\s*|^)while\b/,
/(=\s*|^)begin\b/,
/(^| )case\b/,
/^rescue\b/,
/^def\b/,
/^do\b/,
/^else\b/,
/^elsif\b/,
/^ensure\b/,
/\bwhen\b/,
/\{[^\}]*$/,
/\[[^\]]*$/
]
# outdent regexp tests
OutdentExp = [
/^rescue\b/,
/^ensure\b/,
/^elsif\b/,
/^end\b/,
/^else\b/,
/^fi\b/,
/^esac\b/,
/^done\b/,
/\bwhen\b/,
/^[^\{]*\}/,
/^[^\[]*\]/,
]
def RBeautify.rb_make_tab(tab)
return (tab < 0)?"":TabStr * TabSize * tab
end
def RBeautify.rb_add_line(line,tab)
line.strip!
line = rb_make_tab(tab) + line if line.length > 0
return line
end
def RBeautify.beautify_string(source, path = "")
comment_block = false
in_here_doc = false
here_doc_term = ""
program_end = false
multiLine_array = []
multiLine_str = ""
tab = 0
output = []
source.each do |line|
line.chomp!
if(!program_end)
# detect program end mark
if(line =~ /^__END__$/)
program_end = true
else
# combine continuing lines
if(!(line =~ /^\s*#/) && line =~ /[^\\]\\\s*$/)
multiLine_array.push line
multiLine_str += line.sub(/^(.*)\\\s*$/,"\\1")
next
end
# add final line
if(multiLine_str.length > 0)
multiLine_array.push line
multiLine_str += line.sub(/^(.*)\\\s*$/,"\\1")
end
tline = ((multiLine_str.length > 0)?multiLine_str:line).strip
if(tline =~ /^=begin/)
comment_block = true
end
if(in_here_doc)
in_here_doc = false if tline =~ %r{\s*#{here_doc_term}\s*}
else # not in here_doc
if tline =~ %r{=\s*<<}
here_doc_term = tline.sub(%r{.*=\s*<<-?\s*([_|\w]+).*},"\\1")
in_here_doc = here_doc_term.size > 0
end
end
end
end
if(comment_block || program_end || in_here_doc)
# add the line unchanged
output << line
else
comment_line = (tline =~ /^#/)
if(!comment_line)
# throw out sequences that will
# only sow confusion
while tline.gsub!(/\{[^\{]*?\}/,"")
end
while tline.gsub!(/\[[^\[]*?\]/,"")
end
while tline.gsub!(/'.*?'/,"")
end
while tline.gsub!(/".*?"/,"")
end
while tline.gsub!(/\`.*?\`/,"")
end
while tline.gsub!(/\([^\(]*?\)/,"")
end
while tline.gsub!(/\/.*?\//,"")
end
while tline.gsub!(/%r(.).*?\1/,"")
end
# delete end-of-line comments
tline.sub!(/#[^\"]+$/,"")
# convert quotes
tline.gsub!(/\\\"/,"'")
OutdentExp.each do |re|
if(tline =~ re)
tab -= 1
break
end
end
end
if (multiLine_array.length > 0)
multiLine_array.each do |ml|
output << rb_add_line(ml,tab)
end
multiLine_array.clear
multiLine_str = ""
else
output << rb_add_line(line,tab)
end
if(!comment_line)
IndentExp.each do |re|
if(tline =~ re && !(tline =~ /\s+end\s*$/))
tab += 1
break
end
end
end
end
if(tline =~ /^=end/)
comment_block = false
end
end
error = (tab != 0)
STDERR.puts "Error: indent/outdent mismatch: #{tab}." if error
return output.join("\n") + "\n",error
end # beautify_string
def RBeautify.beautify_file(path)
error = false
if(path == '-') # stdin source
source = STDIN.read
dest,error = beautify_string(source,"stdin")
print dest
else # named file source
source = File.read(path)
dest,error = beautify_string(source,path)
if(source != dest)
# make a backup copy
File.open(path + "~","w") { |f| f.write(source) }
# overwrite the original
File.open(path,"w") { |f| f.write(dest) }
File.open(path, "a") do |f|
f.write "# ==============================================================================\n# This code was automatically cleaned up using code-cleanup\n# title :code-cleanup\n# description :Bash code cleanup script\n# Author :%s\n# date :%s\n# version :%s\n# %s\n# ==============================================================================" % [ AUTHOR, BUILDDATE, PVERSION, WEBSITE ]
end
end
end
return error
end # beautify_file
def RBeautify.main
error = false
if(!ARGV[0])
STDERR.puts "\e[1;32mcode-cleanup %s, %s" % [ PVERSION, BUILDDATE ]
STDERR.puts "\nGNU code-cleanup home page: <http://www.repostorm.com/>.\nE-mail bug reports to: <[email protected]>.\nBe sure to include the word code-cleanup somewhere in the Subject: field.\n\n"
STDERR.puts "usage: code-cleanup [BASH SCRIPT] or \"-\" for stdin."
exit 0
end
ARGV.each do |path|
error = (beautify_file(path))?true:error
end
error = (error)?1:0
exit error
STAMP.main
end # main
end # module RBeautify
module STAMP
end
# if launched as a standalone program, not loaded as a module
if __FILE__ == $0
RBeautify.main
STAMP.main
end
Bash-Depends:
It does not end there, there is also bash-depends in this same package. Bash depends will scan a bash script looking for dependancies in the bash script so you can add the list to your control file for deployment. I guess the main reason I wrote this app beyond wanting to make my debs perfect; I was told it could not be done in bash

Let's run bash-depends against conky-builder(another program I wrote):
theemahn@JackHammer:~$ bashdepends -d conky-builder.sh
bashdepends 1.7.2-1, 10/23/2013
GNU builddeps home page: <http://www.ultimateedition.info/>.
E-mail bug reports to: <[email protected]>.
Be sure to include the word builddeps somewhere in the Subject: field.
Please wait this may take a while depending on the size of the script.
Stripping bash builtin commands.
Externally called commands:
cat
cut
dpkg
expr
glxinfo
grep
hddtemp
ls
lsb_release
rm
sed
sensors
uname
wc
xrandr
yes
SCANNING FOR NON-ESSENTIAL / ESSENTIAL PACKAGE(S)...
COMMAND PACKAGE PRIORITY VERSION
________________________________________________________________________________
cat coreutils required 8.13-3ubuntu3.2
cut coreutils required 8.13-3ubuntu3.2
dpkg dpkg required 1.16.1.2ubuntu7.2
expr coreutils required 8.13-3ubuntu3.2
glxinfo mesa-utils optional 8.1.0-0ubuntu1~precise1
grep grep required 2.10-1
hddtemp hddtemp extra 0.3-beta15-51
ls coreutils required 8.13-3ubuntu3.2
lsb_release lsb-release extra 4.0-0ubuntu20.3
rm coreutils required 8.13-3ubuntu3.2
sed sed required 4.2.1-9
sensors lm-sensors extra 1
uname coreutils required 8.13-3ubuntu3.2
wc coreutils required 8.13-3ubuntu3.2
xrandr x11-xserver-utils optional 7.6+3
yes coreutils required 8.13-3ubuntu3.2
Please add all red packages to your control file.
Depends: mesa-utils (>=8.1.0-0ubuntu1~precise1), hddtemp (>=0.3-beta15-51), lsb-release (>=4.0-0ubuntu20.3), lm-sensors (>=1), x11-xserver-utils (>=7.6+3)
theemahn@JackHammer:~$
I guess it's hard to see red from the above, let's drop a screenie again:
Bash Depends Source code:
- Code: Select all
#!/bin/bash
# ==============================================================================
# title :bashdepends
# description :Build dependancies script for bash
# author :Glenn Cady <[email protected]>
# date :10/23/2013
# version :1.7.2-1
# usage :builddeps --help
# manual :man bashdepends
# notes :See change-log below for further information.
# bash_version :4.2.8(1)-release
# ==============================================================================
# Change-log: 1.7.1-8:First public Release
# 1.7.2-1:Bump version to comply with release version.
# ==============================================================================
VERSION="1.7.2-1"
BUILDDATE="10/23/2013"
# set colors so errors etc. stand out.
txtblk='\e[0;30m' # Black - Regular
txtred='\e[0;31m' # Red
txtgrn='\e[0;32m' # Green
txtylw='\e[0;33m' # Yellow
txtblu='\e[0;34m' # Blue
txtpur='\e[0;35m' # Purple
txtcyn='\e[0;36m' # Cyan
txtwht='\e[0;37m' # White
bldblk='\e[1;30m' # Black - Bold
bldred='\e[1;31m' # Red
bldgrn='\e[1;32m' # Green
bldylw='\e[1;33m' # Yellow
bldblu='\e[1;34m' # Blue
bldpur='\e[1;35m' # Purple
bldcyn='\e[1;36m' # Cyan
bldwht='\e[1;37m' # White
unkblk='\e[4;30m' # Black - Underline
undred='\e[4;31m' # Red
undgrn='\e[4;32m' # Green
undylw='\e[4;33m' # Yellow
undblu='\e[4;34m' # Blue
undpur='\e[4;35m' # Purple
undcyn='\e[4;36m' # Cyan
undwht='\e[4;37m' # White
bakblk='\e[40m' # Black - Background
bakred='\e[41m' # Red
badgrn='\e[42m' # Green
bakylw='\e[43m' # Yellow
bakblu='\e[44m' # Blue
bakpur='\e[45m' # Purple
bakcyn='\e[46m' # Cyan
bakwht='\e[47m' # White
txtrst='\e[0m' # Text Reset
#Folder where executed
CURRENT=$PWD
function Chkdeps (){
#dump header
Version
# verify a parameter was passed
if [[ $1 == "" ]];then
echo -e "${bldred}Please specify a file.${txtrst}"
exit 0
fi
# Filename in case user entered /bin/repomaster for example set to repomaster
filename=${1##*/}
# set bash file to process copy to temp
cp $1 /tmp/
BFTP="/tmp/"$filename
# test for bash script existance
test -s $BFTP || exit 0;
echo -e "${bldgrn}Please wait this may take a while depending on the size of the script.${txtrst}"
# roll to temp to begin processing.
cd /tmp/
# strip tabs
sed -i 's/^[ \t]*//' $BFTP
# strip comments
sed -e 's/#.*$//' -e '/^$/d' $filename > wip.txt
# strip echo a builtin
sed -i '/echo .*/d' wip.txt
# strip functions
sed -i '/function .*/d' wip.txt
sed -i '/}.*/d' wip.txt
# strip Printf
sed -i '/printf .*/d' wip.txt
# strip braces
cat wip.txt | tr -d "[]" > $filename
# test for existance of temporary words list in case
# this tool has been ran before.if so remove file.
test -e /tmp/words.txt && rm /tmp/words.txt
# grab commands used in bash file
for word in $(cat "$BFTP")
do
[ -f '$word' -o -f /bin/$word ] && echo $word >> /tmp/words.txt &2>/dev/null
[ -f '$word' -o -f /usr/bin/$word ] && echo $word >> /tmp/words.txt &2>/dev/null
done
cat $BFTP | grep '$(' | cut -d'(' -f2 | sed 's/ .*//g' >> /tmp/words.txt
cat $BFTP | grep '`' | cut -d'`' -f2 | sed 's/ .*//g' >> /tmp/words.txt
#strip empty lines
sed -i '/^$/d' /tmp/words.txt
#cat $filename | cut -d' ' -f1 >> words.txt
#intiate array
array_counter=0
array_value=0
#Declare array with all bash builtins
declare -a Builtins=('alias' 'bg' 'bind' 'break' 'builtin' 'cd' 'command' 'compgen' 'complete' 'continue' 'declare' 'dirs' 'disown' 'echo' 'enable' 'eval' 'exec' 'exit' 'export' 'fc' 'fg' 'getopts' 'hash' 'help' 'history' 'jobs' 'kill' 'let' 'local' 'logout' 'popd' 'printf' 'pushd' 'pwd' 'read' 'readonly' 'return' 'set' 'shift' 'shopt' 'source' 'suspend' 'test' 'times' 'trap' 'type' 'typeset' 'ulimit' 'umask' 'unalias' 'unset' 'wait');
#Strip references to bash builtin commands
echo -e "${bldgrn}Stripping bash builtin commands.${txtrst}"
for number in ${Builtins[@]}
do
sed -i "s/${Builtins[$array_counter]}//g" /tmp/words.txt
array_counter=$(($array_counter + 1))
done
#scrap open brackets* from list
sed -i 's/\[.*//g' /tmp/words.txt
#scrap empty lines and a few builtins
sed -i '/^$/d' /tmp/words.txt
sed -i '/for .*/d' /tmp/words.txt
sed -i '/from.*/d' /tmp/words.txt
sed -i "/'/d" /tmp/words.txt
#Start building dependancy list
cat /tmp/words.txt | tr " " "\n" | sort | uniq >/tmp/depends.txt
#Strip #'s
sed -i '/sh/d' /tmp/depends.txt
#Strip empty lines
sed -i '/^$/d' /tmp/depends.txt
#Initiate header & display results to end user
echo -e "${bldgrn}Externally called commands:${txtrst}"
# Check list existance no list no dependancies
if test -s /tmp/depends.txt
then
cat /tmp/depends.txt
else
echo -e "${bldred}$1 has no external dependancies.${txtrst}"
CleanUP
exit 0
fi
#Initate header to display progress in scanning. Make it pretty ;)
echo -e "${bldgrn}SCANNING FOR NON-ESSENTIAL / ESSENTIAL PACKAGE(S)..."
printf '%-15s %-30s %-10s %s\n' \
"COMMAND" "PACKAGE" "PRIORITY" "VERSION"
#Punch out package database to reference later
echo -e "${bldwht}________________________________________________________________________________${txtrst}"
dpkg-query -Wf '${Package}:${Priority}:${Version}\n' | sort -b -k2,2 -k1,1 >/tmp/packages.txt
test -e /tmp/list.txt && rm /tmp/list.txt
#Set header for Control file
cat /tmp/depends.txt | while read FILE
do
BINARY=$(which $FILE)
if [[ $BINARY != "" ]]; then
POSSIBLE=$(dpkg -S `which $BINARY` | cut -d":" -f1)
PACKAGEPRIORITY=$(dpkg-query -s $POSSIBLE | grep "Priority:" | cut -d: -f2 | sed 's/ //g')
PVERSION=$(dpkg-query -s $POSSIBLE | grep "Version:" | cut -d: -f2 | sed 's/ //g')
else
exit 0
fi
# I have not seen an unknown ever come up please report if you
# see one and the package involved.
case $PACKAGEPRIORITY in
"standard")
echo -e -n "${bldgrn}";
printf '%-15s %-30s %-10s %s\n' \
"$FILE" "$POSSIBLE" "$PACKAGEPRIORITY" "$PVERSION";;
"required")
echo -e -n "${bldgrn}";
printf '%-15s %-30s %-10s %s\n' \
"$FILE" "$POSSIBLE" "$PACKAGEPRIORITY" "$PVERSION";;
"important")
echo -e -n "${bldgrn}";
printf '%-15s %-30s %-10s %s\n' \
"$FILE" "$POSSIBLE" "$PACKAGEPRIORITY" "$PVERSION";;
"optional")
echo -e -n "${bldred}";
printf '%-15s %-30s %-10s %s\n' \
"$FILE" "$POSSIBLE" "$PACKAGEPRIORITY" "$PVERSION";
echo "$POSSIBLE:$PVERSION" >> list.txt;;
"extra")
echo -e -n "${bldred}";
printf '%-15s %-30s %-10s %s\n' \
"$FILE" "$POSSIBLE" "$PACKAGEPRIORITY" "$PVERSION";
echo "$POSSIBLE:$PVERSION" >> list.txt;;
*)
echo -e -n "${bldblu}";
printf '%-15s %-30s %-10s %s\n' \
"$FILE" "$POSSIBLE" "UNKNOWN" "$PVERSION";;
esac
done
echo -e "${bldwht}Please add all red packages to your control file.${txtrst}"
GenerateList
}
function GenerateList {
if test -s list.txt
then
echo -n "Depends: "
else
echo -e "${bldgrn}No external dependancies.${txtrst}"
CleanUP
exit 0
fi
NDEPENDS=$(cat list.txt | wc -l)
cat /tmp/list.txt | while read FILE
do
PROCESS=$(($PROCESS + 1))
DEPEND=$(echo $FILE | cut -d: -f1)
DVERSION=$(echo $FILE | cut -d: -f2)
# make sure if is not entered twice on the list for example the
# commands "ar" and "as" are both part of binutils. We only want
# it referenced once.
if test -s fulllist.txt
then
ISTHERE=$(cat fulllist.txt | grep $DEPEND)
if [[ $ISTHERE == "" ]]; then
if [[ $NDEPENDS != $PROCESS ]]; then
OUT=$OUT$DEPEND" (>="$DVERSION"), "
else
OUT=$OUT$DEPEND" (>="$DVERSION")"
fi
fi
else
if [[ $NDEPENDS != $PROCESS ]]; then
OUT=$OUT$DEPEND" (>="$DVERSION"), "
else
OUT=$OUT$DEPEND" (>="$DVERSION")"
fi
fi
# push list out to file bash gets dumb when it leaves a do done
# loop and I do not feel like writing it to run in a sub shell.
echo $OUT > fulllist.txt
done
cat fulllist.txt
CleanUP
}
function CleanUP {
# self explanatory
test -e /tmp/list.txt && rm /tmp/list.txt
test -e /tmp/fulllist.txt && rm /tmp/fulllist.txt
test -e /tmp/words.txt && rm /tmp/words.txt
test -e /tmp/packages.txt && rm /tmp/packages.txt
test -e /tmp/wip.txt && rm /tmp/wip.txt
test -e /tmp/depends.txt && rm /tmp/depends.txt
test -e $BFTP && rm $BFTP
}
function Version {
# dump version number and exit
echo -e "${undwht}bashdepends $VERSION, $BUILDDATE${txtrst}
GNU builddeps home page: <http://www.ultimateedition.info/>.
E-mail bug reports to: <[email protected]>.
Be sure to include the word builddeps somewhere in the Subject: field."
}
function Help() {
# Help system simple and functional.
if [[ $1 == "" ]];
then
PRAM="ALL"
else
PRAM=$1
fi
echo -e "${undwht}bashdepends $VERSION, $BUILDDATE${txtrst}"
case $PRAM in
ALL)
echo -e "${txtgrn}GNU bashdepends home page: <http://www.ultimateedition.info/>.
E-mail bug reports to: <[email protected]>.
Be sure to include the word bashdepends somewhere in the Subject: field.${txtrst}";
echo "
bashdepends is a part of the tm-tools package. Many of the tools are heavy and
are not intended to be ran by the common user. The tools are geared for the
admininstrator. Please see man tmtools for more info.";
echo -e "
${bldgrn}Usage: bashdepends -[-COMMAND] <BASHSCRIPT>${txtrst}
Mandatory arguments to long options are identical for short options.
possible commands...
-d --depends find dependencies for <BASHSCRIPT>
-h --help this help message
-v --version dump version info
${bldgrn}Example: bashdepends mybashscript.sh
${bldgrn}bashdepends --help [COMMAND] for further information.${txtrst}";;
ALL|d|depends)
echo -e "
${bldwht}Usage depends;${txtrst}
${txtgrn}bashdepends -d <BASHSCRIPT>${txtrst}
Displays external dependencies on <BASHSCRIPT>.";;
ALL|v|version)
echo -e "
${bldwht}Usage version;${txtrst}
${txtgrn}bashdepends -v${txtrst}
Displays bashdepends version number and exits.";;
ALL|h|help|\?)
echo -e "
${bldwht}Useage Help [COMMAND];${txtrst}
${txtgrn}bashdepends -h [COMMAND]${txtrst}
Displays this message. For futher information bashdepends help [COMMAND]
or refer to the manpages.
man bashdepends"
echo -e "${txtgrn}"
echo -e "Example: bashdepends mybashscript.sh"
echo -e "${txtwht}Will find the build dependancies for mybashscript.sh${txtrst}"
esac
exit 0
}
#Command switch preprocessor
case "$1" in
-h|--help|-\?) Help $2; exit 0;;
-v|--version) Version; exit 0;;
-d|--depends) Chkdeps $2; exit 0;;
*) Help; exit 0;;
esac
I will not rob you of the bash autocompletion scripts.
Bash Depends (/etc/bash_completion.d/):
- Code: Select all
# Debian bashdepends(8) completion.
have bashdepends &&
_bashdepends()
{
dashify()
{
local i
for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do
if [ ${#COMPREPLY[i]} -le 2 ]; then
COMPREPLY[i]=-${COMPREPLY[i]}
else
COMPREPLY[i]=--${COMPREPLY[i]}
fi
done
}
local cur cur_nodash prev
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
cur_nodash=${cur#-}
prev=${COMP_WORDS[COMP_CWORD-1][COMP_CWORD-2]}
if [ $COMP_CWORD = 1 ]; then
# first parameter on line
case "$cur" in
-d*)
COMPREPLY=( $( compgen -W 'depends' \
$cur_nodash ) )
dashify
return 0
;;
-*)
COMPREPLY=( $( compgen -W 'depends version help' ${cur_nodash#-} ) )
dashify;
return 0
;;
--*)
COMPREPLY=( $( compgen -W 'depends version help' ${cur_nodash#-} ) )
dashify;
return 0
;;
*)
COMPREPLY=( $( compgen -f $cur ) )
return 0
;;
esac
fi
if [ $COMP_CWORD = 2 ]; then
case "${COMP_WORDS[1]}" in
--d*)
# standard filename completion
COMPREPLY=( $( compgen -f $cur ) )
return 0
;;
-d)
# standard filename completion
COMPREPLY=( $( compgen -f $cur ) )
return 0
;;
--h*)
# complete on list of relevant options
COMPREPLY=( $( compgen -W 'depends version' ${cur_nodash#-} ) )
#dashify;
return 0
;;
-h)
# complete on list of relevant options
COMPREPLY=( $( compgen -W 'depends version' ${cur_nodash#-} ) )
#dashify;
return 0
;;
esac
fi
}
complete -F _bashdepends bashdepends
Code-Cleanup (/etc/bash_completion.d/):
- Code: Select all
# Debian code-cleanup(8) completion.
have code-cleanup &&
_code-cleanup()
{
dashify()
{
local i
for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do
if [ ${#COMPREPLY[i]} -le 2 ]; then
COMPREPLY[i]=-${COMPREPLY[i]}
else
COMPREPLY[i]=--${COMPREPLY[i]}
fi
done
}
local cur cur_nodash prev
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
cur_nodash=${cur#-}
prev=${COMP_WORDS[COMP_CWORD-1][COMP_CWORD-2]}
if [ $COMP_CWORD = 1 ]; then
# first parameter on line
case "$cur" in
-*)
COMPREPLY=( $( compgen -W 'help' \
$cur_nodash ) )
dashify
return 0
;;
--*)
COMPREPLY=( $( compgen -W 'help' ${cur_nodash#-} ) )
dashify;
return 0
;;
*)
COMPREPLY=( $( compgen -f $cur ) )
# complete on deb files
return 0
;;
esac
fi
}
complete -F _code-cleanup code-cleanup
This is simply amazing all of this weighs in at 10.5kb in size. I now remember why Bash is my favorite language

Back to Contents: