mirror of https://github.com/nirenjan/dotfiles.git
Add newsh script
parent
a1dbe3c5d0
commit
0e3760e65e
|
@ -0,0 +1,140 @@
|
|||
#!/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
|
Loading…
Reference in New Issue