inne hat geschrieben:Die Lösung dazu könntest du bitte dann hier veröffentlichen. Die interessiert mich auch.
So, also
undistract-me legt $PROMPT_COMMAND folgendermaßen fest »
preexec_set_exit;preexec_invoke_cmd« bzw. wenn $PROMPT_COMMAND nicht leer ist, dann stellt es den ursprünglichen Inhalt in die Mtte, zB
(und funktioniert hinterher nicht mehr).
Stellt man den eigenen Befehl dagegen ganz an den Anfang funktioniert es noch/wieder. Weil
undistract-me sich per default ohnehin nur in Login-Shells aktiviert, sieht meine Lösung in der ~/.bashrc so aus:
Code: Alles auswählen
…
unset PROMPT_COMMAND
# undistract-me
if [ ! -z "$BASH_VERSION" -o -z "$PS1" -o -n "$last_command_started_cache" ]; then
. /usr/share/undistract-me/long-running.bash
notify_when_long_running_commands_finish_install
fi
export PROMPT_COMMAND="prompt_status;${PROMPT_COMMAND}"
Das unset ist überflüssig, wenn man PROMPT_COMMAND vorher nicht setzt - wie gesagt undistract-me macht das nur bei login-Shells. Ich habe es nur verwendet um den Fehler einzugrenzen und habe es dann dringelassen.
__________
Meine Funktion prompt_status und den PS1, den sie ersetzt hat, werde ich der Vollständigkeit halber auch herzeigen. Davor hat mein PS1 so ausgesehen
Code: Alles auswählen
'\[\033[1;32m\]${debian_chroot:+[$debian_chroot]}[\[\033[1;$(EXITSTATUS=${?}; [[ ${UID} > 0 ]] && echo 32 || echo 31; exit ${EXITSTATUS})m\]\u\[\033[1;32m\]@\[\033[1;$(EXITSTATUS=${?}; [ -z "${SSH_CLIENT}" ] && echo 32 || echo 33; exit ${EXITSTATUS})m\]\h\[\033[1;32m\]:\[\033[1;34m\]\w\[\033[1;32m\]][\[\033[1;$(EXITSTATUS=${?}; [[ $(jobs -p) ]] && echo 33 || echo 32; exit ${EXITSTATUS})m\]\j\[\033[1;32m\]:\[\033[1;$(EXITSTATUS=${?}; [[ ${EXITSTATUS} > 0 ]] && echo 31 || echo 32; exit ${EXITSTATUS})m\]${?}\[\033[1;32m\]]\[\033[0m\]\$ '
das ist nun diesen Zeilen in der ~/.bashrc gewichen:
Code: Alles auswählen
…
function prompt_status {
local STATUS="${?}"
local RESET_COLOUR='\e[0m'
local STANDARD_COLOUR='\e[1;32m'
local ERROR_COLOUR='\e[1;31m'
local OK_COLOUR='\e[1;32m'
local WARN_COLOUR='\e[1;33m'
local DIR_COLOUR='\e[1;34m'
local SIGNAL=""
local USER_COLOUR="${OK_COLOUR}"
local HOST_COLOUR="${OK_COLOUR}"
local STATUS_COLOUR="${OK_COLOUR}"
local JOBS_COLOUR="${OK_COLOUR}"
[[ ${UID} = 0 ]] && USER_COLOUR="${ERROR_COLOUR}"
[ -z "${SSH_CLIENT}" ] || HOST_COLOUR="${WARN_COLOUR}"
[[ $(jobs -p) ]] && JOBS_COLOUR="${WARN_COLOUR}"
if [[ ${STATUS} > 0 ]]; then
if test ${STATUS} -gt 128; then
SIGNAL="$(builtin kill -l $((${STATUS} - 128)) 2>/dev/null)"
fi
STATUS_COLOUR="${ERROR_COLOUR}"
STATUS="${STATUS}${SIGNAL:+,${SIGNAL}}"
#echo "[Exit ${STATUS} ${SIGNAL}]"
#PROMPT_STATUS="${ERROR_COLOUR}✗${RESET_COLOUR}"
else
STATUS="✓"
fi
PS1="\[${STANDARD_COLOUR}\][\[${USER_COLOUR}\]\u\[${STANDARD_COLOUR}\]@\[${HOST_COLOUR}\]\h\[${STANDARD_COLOUR}\]:\[${DIR_COLOUR}\]\w\[${STANDARD_COLOUR}\]]\[${JOBS_COLOUR}\]\j\[${STANDARD_COLOUR}\]:\[${STATUS_COLOUR}\]${STATUS}\[${STANDARD_COLOUR}\]]\$ \[${RESET_COLOUR}\]"
return 0
}
# undistract-me
if [ ! -z "$BASH_VERSION" -o -z "$PS1" -o -n "$last_command_started_cache" ]; then
. /usr/share/undistract-me/long-running.bash
notify_when_long_running_commands_finish_install
fi
PROMPT_COMMAND="prompt_status;${PROMPT_COMMAND}"