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