#!/usr/bin/env bash
# - See 'man env' and the discussion involving 'env'
# and invoking Perl
# in "Programming Perl", by Larry Wall
# bcmp, Bash "CoMPiler"
# this program really just runs some housekeeping
# chores you should do before trying to run a bash script.
# This is partly inspired by a discussion of software
# configuration management I read somewhere
# (source forgotten) discussing the nightly 'build'
# of some perl scripts, which rather than compiling them
# they were put through regressions tests to verify they
# were ready to run.
# Many of the commands used in this were things I'd come
# across lately that seemed to fit in with this idea.
#
# 7 June 2008 Dallas E. Legan II
USAGE="${0##*/} -h | <script>" ;
THESCRIPT=${1:?"What script file? Usage: ${USAGE}"} ;
[ -f ${THESCRIPT} ] || { echo ${USAGE} ; exit ; } ;
set -e ;
# - This causes bash to go into 'abort on command error' mode
# See "Linux Journal", Feb. 2008, p. 10, "Letters"
# "mkdir Errors Even More Trivial", Ed L. Cashin
# http://www.linuxjournal.com/article/9957
# This is also documented in 'man bash' and 'help set'
# in somewhat obscure, too understated a way.
# 9 July 2008 addition:
# This is also referenced in
# the "bash Cookbook",
# Carl Albing, JP Vossen & Cameron Newham
# O'Reilly, (C) 2007
# ISBN-10: 0-596-52678-4
# ISBN-13: 978-0-596-52678-8
# http://www.bashcookbook.com/
# p. 75 - 76
# Recipe 4.6 "Using Fewer if Statements"
sed -i 's/ *$//' ${THESCRIPT} ;
# - to strip out trailing blanks, particularly annoying
# after '\' 'line continuations'
# '-i' causes 'editing in place'.
# (Addition 1 July 2008:)
# I came across another reason for this
# in the "bash Cookbook",
# p. 57 - 59,
# Recipe 3.3 "Preventing Weird Behaviour in a Here-Document"
# 'trap' on page 59 in particular.
# Basicly, trailing spaces on here document delimiters
# can cause a bad day.
# --
# Alternatively, this might be done using
# 'ed', to make it more traditional and portable.
# For now, I'm leaving out this idea,
# but you might want to install some commands
# to verify that the number of
# '(' == ')' (outside 'case' statements)
# '[' == ']'
# '{' == '}'
# Total number of "'" and '"' are even, etc.
# Seperate checks for these might make
# make interpreting the results easier to figure out.
chmod ugo+x ${THESCRIPT} ;
# - simply to set the permissions to executable
bash -n ${THESCRIPT} ;
# - to do a simple syntax check
# per the "bash Cookbook",
# p. 476 - 477
# Recipe 19.12 "Testing bash Script Syntax"
# also 'man bash' and 'help set',
# where this is obscurely documented.
cp ${THESCRIPT} ~/bin/ ;
# - Lastly, copy the script to a directory in PATH,
# this could be any satisfactory location.
# You might also want to check the script into some
# version control system at this point,
# or runs some functional/regression tests.
echo ${THESCRIPT} seems ready to run ;
# 9 July 2008 addition:
# This is an idea Garth told me about while at
# Rockwell - when it doesn't conflict with the
# purpose of the program, it's good to have a
# message telling if it succeeded or not.
# This was in the mainframe world,
# and this can conflict with the needs of
# Unix programs, but a good idea when practical.
# END OF SCRIPT
Monday, June 9, 2008
A bash Tool
I was writing a bash script the other day, and got fed up with having to take seperate steps to handle a lot of the routine steps to make it useable. So, I piled them all together. This bundles together several ideas I been exposed to in the last week.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment