mirror of https://github.com/nirenjan/dotfiles.git
141 lines
3.1 KiB
Bash
Executable File
141 lines
3.1 KiB
Bash
Executable File
#!/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 <new-shell-script-filename>
|
|
|
|
OPTIONS
|
|
-t <type> 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
|