J'ai quelque chose comme ça dans mon script de connexion qui garde $ foo en haut à droite de mon terminal. Cela fonctionne, mais avec une mise en garde. Si je tape une commande vraiment longue, elle ne s'enroulera pas. (Bien, ça va emballer si c'est plus de deux lignes, mais la 2ème ligne écrase la 1ère ligne, si cela a du sens.)bash: retour à la ligne avec PS1 fantaisie qui fait écho positionnel
Quelqu'un sait comment je peux faire une bash wrap (ie insérer newline) à $ POS ? Ou même à $ COLUMNS?
trunc_pwd() { # See http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x783.html
local pwdmaxlen=50 # Number of $PWD chars to keep
local trunc_symbol="<" # Prepend to truncated $PWD
if ((${#PWD} > $pwdmaxlen)); then
local pwdoffset=$((${#PWD} - $pwdmaxlen))
echo "${trunc_symbol}${PWD:$pwdoffset:$pwdmaxlen}"
else
echo ${PWD} | sed "s%^${HOME}%~%g"
fi
}
foo="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
get_pos()
{
POS=$((COLUMNS-(${#foo}+4)))
}
if [[ ${PS1} ]]; then
PROMPT_COMMAND='get_pos ; echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:$(trunc_pwd)"; echo -ne "\007"'
export PS1="\[email protected]\h \W \$ \[\e[s\]\[\e[1;\$(echo -n \${POS})H\]$foo\[\e[u\]"
fi
Oui, +1. ('ESC [s' est" enregistrer la position du curseur ",' ESC [; H' est "positionner le curseur", et 'ESC [u' est" restaurer la position du curseur ".) Il tente d'imprimer' $ foo' ailleurs dans la fenêtre, la longueur de '$ foo' devrait être ignorée afin de suivre la durée de l'invite sur la ligne d'entrée - ce qui signifie que' $ foo' devrait être à l'intérieur de '\ [' ... ' \] 'comme vous le suggérez, plutôt qu'à l'extérieur comme dans l'original. –
Vous les gars rock. '\ [... \]' était mon problème. Maintenant, avec cela à l'écart, j'aime la solution plus élégante de $ ((COLUMNS - ($ {# foo}))) 'au lieu d'appeler une fonction dans PROMPT_COMMAND. Je suis heureux et humble. Merci! –
@ evil-otto - En utilisant votre solution, comment ajouter de la couleur? Quand je l'essaye, ça gâche l'emballage et l'édition des commandes. Je suis en enfer de séquence d'échappement! –