Skip to main content

Get User Input (Shell Agnostic)

function getUserInput () {    

    if [ $# -gt 1 ] ; then

        echo "Usage example: $0"
        echo "Usage example: $0 -hidden"
        return

    else
        
        if [ $# -gt 0 ] ; then
            local arg=$(echo "$1" | tr '[:upper:]' '[:lower:]')
        fi

        if [ -n "$arg" ] && [ "$arg" == "help" ] ; then
            echo "Usage example: $0"
            echo "Usage example: $0 -hidden"
            return
        elif [ -n "$arg" ] && [ "$arg" == "-hidden" ] ; then
            # Use `ps -p $$` to determine shell (e.g. zsh / bash)
            # Then craft the correct `read` command` for shell environment
            ps -p $$ -o cmd= | grep --color=auto zsh > /dev/null && \
            read -s USER_INPUT?"Enter your input (hidden): " || \
            read -s -p "Enter your input (hidden): " USER_INPUT
            echo
        else
            ps -p $$ -o cmd= | grep --color=auto zsh > /dev/null && \
            read USER_INPUT?"Enter your input: " || \
            read -p "Enter your input : " USER_INPUT
        fi

        if [ -n "$USER_INPUT" ] ; then
            export "USER_INPUT" && echo '[+] User input exported to global variable $USER_INPUT'
        fi

        return

    fi

}