#!/bin/bash # Script to create a new shell script and open it for editing APP=$(basename $0) ####################################################################### # Set default options ####################################################################### NEWSH_SCRIPT_TYPE=bash NEWSH_USE_ABS_PATH=0 NEWSH_NO_EXEC_FLAG=0 NEWSH_TRUNC_SCRIPT=0 NEWSH_SCRIPT_FILE= ####################################################################### # Usage information ####################################################################### usage() { cat <<-EOM Usage: $APP OPTIONS OPTIONS -t Type of script to create (bash/python/ruby/expect) -a Use absolute path to binary instead of the env wrapper -x Don't make the file executable -f Overwrite the script file if it already exists -h Display this help message $APP will abort if the specified filename already exists EOM } ####################################################################### # Get path to binary ####################################################################### get_binary_path() { local binary=$1 local env_path=$(which env) local bin_path=$(which $binary) if [[ -z "$bin_path" ]] then echo "$APP: fatal: Cannot find $binary" >&2 exit 1 fi case "$NEWSH_USE_ABS_PATH" in 0) # Use env as the path specifier NEWSH_BINARY_PATH="$env_path $binary" ;; 1) # Use absolute path to the binary as the path specifier NEWSH_BINARY_PATH="$bin_path" ;; *) echo "$APP: fatal: Corrupted internal state!" >&2 echo "$APP: USE_ABS_PATH=$NEWSH_USE_ABS_PATH" >&2 exit 2 ;; esac } ####################################################################### # Verify command line switches ####################################################################### while getopts "t:axfh" OPTION do case "$OPTION" in h) usage exit 0 ;; t) NEWSH_SCRIPT_TYPE=$OPTARG ;; a) NEWSH_USE_ABS_PATH=1 ;; x) NEWSH_NO_EXEC_FLAG=1 ;; f) NEWSH_TRUNC_SCRIPT=1 ;; \?) exit 1 ;; :) echo "$APP: Option -$OPTARG requires an argument" >&2 exit 1 ;; esac done shift $((OPTIND - 1)) NEWSH_SCRIPT_FILE=$1 if [[ -z "$NEWSH_SCRIPT_FILE" ]] then echo "$APP: fatal: Missing script file!" >&2 exit 1 fi if [[ -e "$NEWSH_SCRIPT_FILE" ]] then if [[ "$NEWSH_TRUNC_SCRIPT" == "0" ]] then echo "$APP: fatal: Existing script file $NEWSH_SCRIPT_FILE" >&2 exit 1 elif [[ "$NEWSH_TRUNC_SCRIPT" == "1" ]] then echo "$APP: overwriting existing script file $NEWSH_SCRIPT_FILE" >&2 fi fi get_binary_path $NEWSH_SCRIPT_TYPE (cat <<-EOF #!$NEWSH_BINARY_PATH # Autogenerated by $APP on $(date +%F) at $(date +%T%z) EOF ) > "$NEWSH_SCRIPT_FILE" # Check and make file executable if [[ "$NEWSH_NO_EXEC_FLAG" == "0" ]] then chmod +x "$NEWSH_SCRIPT_FILE" fi