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