Ugly Bash Scripting
I started down this rabbit hole tonight trying to make a bash script do more than I probably should make it do. But I didn’t want to move to something else. This may be some of the ugliest stuff I’ve ever written.
for file in $files; do
if [ "$file" != "./00000000000001-tSQLVersions.sql" ]; then
echo "Checking if $file is already loaded..."
# oh this is ugly, oh so very very ugly
# the tr on the end trims the newline out of the return from SQL
check=`$MySQL -u$MyUSER -h$MyHOST -p$MyPASS $MyDB --execute="SELECT COUNT(*) FROM tSQLVersions WHERE message = '$file';" | tr -d '\n'`
check=`echo -n "$check"`
else
# ridiculously ugly hack to hardcode updater to always assume this special file isn't loaded
check="COUNT(*)0"
fi
if [ "$check" = "COUNT(*)0" ]; then
echo "Loading $file..."
$MySQL -u$MyUSER -h$MyHOST -p$MyPASS $MyDB < $file
$MySQL -u$MyUSER -h$MyHOST -p$MyPASS $MyDB --execute="insert into tSQLVersions (message) values ('$file');"
else
echo "File $file has already been loaded!"
fi
done
The tr -d '\n'
at the end of line 6 is my personal
favorite. MySQL was dumping a newline in the STDOUT and screwing up my
comparison. Fix it right? Nah. Just rip that newline out of there. All
better!
I share this for others to know what not to do.
But hey, it works. :-) Who needs any fancy pants migrations.