sudo_command_line() { local prefix="sudo " # If the line is empty, pull the previous history entry if [[ -z $READLINE_LINE ]]; then READLINE_LINE=$(fc -ln -1 2>/dev/null) || return READLINE_POINT=${#READLINE_LINE} fi if [[ $READLINE_LINE == "$prefix"* ]]; then READLINE_LINE="${READLINE_LINE#"$prefix"}" # Keep cursor position sane after removing prefix if (( READLINE_POINT >= ${#prefix} )); then (( READLINE_POINT -= ${#prefix} )) else READLINE_POINT=0 fi else READLINE_LINE="$prefix$READLINE_LINE" (( READLINE_POINT += ${#prefix} )) fi } sudo_e_command_line() { local prefix="sudo -E " # If the line is empty, pull the previous history entry if [[ -z $READLINE_LINE ]]; then READLINE_LINE=$(fc -ln -1 2>/dev/null) || return READLINE_POINT=${#READLINE_LINE} fi if [[ $READLINE_LINE == "$prefix"* ]]; then READLINE_LINE="${READLINE_LINE#"$prefix"}" # Keep cursor position sane after removing prefix if (( READLINE_POINT >= ${#prefix} )); then (( READLINE_POINT -= ${#prefix} )) else READLINE_POINT=0 fi else READLINE_LINE="$prefix$READLINE_LINE" (( READLINE_POINT += ${#prefix} )) fi } # Defined shortcut keys: # - [Esc] [Esc] for plain sudo # - [Esc] [e] for sudo -E bind -x '"\e\e": sudo_command_line' bind -x '"\ee": sudo_e_command_line'