function proml {
local BLUE="\[\033[0;34m\]"
local RED="\[\033[0;31m\]"
local LIGHT_RED="\[\033[1;31m\]"
local WHITE="\[\033[1;37m\]"
local LIGHT_GRAY="\[\033[0;37m\]"
case $TERM in
xterm*)
TITLEBAR='\[\033]0;\u@\h:\w\007\]'
;;
*)
TITLEBAR=""
;;
esac
PS1="${TITLEBAR}\
$BLUE[$RED\$(date +%H%M)$BLUE]\
$BLUE[$LIGHT_RED\u@\h:\w$BLUE]\
$WHITE\$$LIGHT_GRAY "
PS2='> '
PS4='+ '
}
Si noti che questo necessita di un font VGA.
# Creato da KrON da windowmaker su IRC
# Cambiato da Spidey 08/06
function elite {
PS1="\[\033[31m\]\332\304\[\033[34m\](\[\033[31m\]\u\[\033[34m\]@\[\033[31m\]\h\
\[\033[34m\])\[\033[31m\]-\[\033[34m\](\[\033[31m\]\$(date +%I:%M%P)\
\[\033[34m\]-:-\[\033[31m\]\$(date +%m)\[\033[34m\033[31m\]/\$(date +%d)\
\[\033[34m\])\[\033[31m\]\304-\[\033[34m]\\371\[\033[31m\]-\371\371\
\[\033[34m\]\372\n\[\033[31m\]\300\304\[\033[34m\](\[\033[31m\]\W\[\033[34m\])\
\[\033[31m\]\304\371\[\033[34m\]\372\[\033[00m\]"
PS2="> "
}
Io in realtà uso questo prompt, ma si ottengono notevoli ritardi quando il prompt appare su una macchina monoutente PII-400, quindi non raccomando di usarlo su un P-100 multiutente o altro... Guardatelo per cercare idee, piuttosto che per usarlo in pratica.
#!/bin/bash #---------------------------------------------------------------------- # POWER USER PROMPT "pprom2" #---------------------------------------------------------------------- # # Creato nell'agosto 98, Ultima Modifica 9 novembre 98 da Giles # # Problema: quando load va giu', dice "1.35down-.08", eliminare il # segno negativo function prompt_command { # Crea la variabile TotalMeg: somma delle dimensioni dei file # visibile nella directory corrente local TotalBytes=0 for Bytes in $(ls -l | grep "^-" | cut -c30-41) do let TotalBytes=$TotalBytes+$Bytes done TotalMeg=$(echo -e "scale=3 \nx=$TotalBytes/1048576\n if (x<1) {print \"0\"} \n print x \nquit" | bc) # Questo viene usato per calcolare il differenziale del valore # del carico fornito dal comando "uptime". "uptime" fornisce medie di # carico per 1, 5 r 15 minuti. # local one=$(uptime | sed -e "s/.*load average: \(.*\...\), \(.*\...\), \(.*\...\)/\1/" -e "s/ //g") local five=$(uptime | sed -e "s/.*load average: \(.*\...\), \(.*\...\), \(.*\...\).*/\2/" -e "s/ //g") local diff1_5=$(echo -e "scale = scale ($one) \nx=$one - $five\n if (x>0) {print \"up\"} else {print \"down\"}\n print x \nquit \n" | bc) loaddiff="$(echo -n "${one}${diff1_5}")" # Conta file visibili: let files=$(ls -l | grep "^-" | wc -l | tr -d " ") let hiddenfiles=$(ls -l -d .* | grep "^-" | wc -l | tr -d " ") let executables=$(ls -l | grep ^-..x | wc -l | tr -d " ") let directories=$(ls -l | grep "^d" | wc -l | tr -d " ") let hiddendirectories=$(ls -l -d .* | grep "^d" | wc -l | tr -d " ")-2 let linktemp=$(ls -l | grep "^l" | wc -l | tr -d " ") if [ "$linktemp" -eq "0" ] then links="" else links=" ${linktemp}l" fi unset linktemp let devicetemp=$(ls -l | grep "^[bc]" | wc -l | tr -d " ") if [ "$devicetemp" -eq "0" ] then devices="" else devices=" ${devicetemp}bc" fi unset devicetemp } PROMPT_COMMAND=prompt_command function pprom2 { local BLUE="\[\033[0;34m\]" local LIGHT_GRAY="\[\033[0;37m\]" local LIGHT_GREEN="\[\033[1;32m\]" local LIGHT_BLUE="\[\033[1;34m\]" local LIGHT_CYAN="\[\033[1;36m\]" local YELLOW="\[\033[1;33m\]" local WHITE="\[\033[1;37m\]" local RED="\[\033[0;31m\]" local NO_COLOUR="\[\033[0m\]" case $TERM in xterm*) TITLEBAR='\[\033]0;\u@\h:\w\007\]' ;; *) TITLEBAR="" ;; esac PS1="$TITLEBAR\ $BLUE[$RED\$(date +%H%M)$BLUE]\ $BLUE[$RED\u@\h$BLUE]\ $BLUE[\ $LIGHT_GRAY\${files}.\${hiddenfiles}-\ $LIGHT_GREEN\${executables}x \ $LIGHT_GRAY(\${TotalMeg}Mb) \ $LIGHT_BLUE\${directories}.\ \${hiddendirectories}d\ $LIGHT_CYAN\${links}\ $YELLOW\${devices}\ $BLUE]\ $BLUE[${WHITE}\${loaddiff}$BLUE]\ $BLUE[\ $WHITE\$(ps ax | wc -l | sed -e \"s: ::g\")proc\ $BLUE]\ \n\ $BLUE[$RED\$PWD$BLUE]\ $WHITE\$\ \ $NO_COLOUR " PS2='> ' PS4='+ ' }
Un amico si è lamentato perché non gli piaceva che il prompt cambiasse continuamente di dimensione perché c'era $PWD all'interno, così ho scritto questo prompt che adatta la sua dimensione all'esatta larghezza dal terminale.
#!/bin/bash # termwide prompt # Giles - creato il 2 novembre 98 # # Qui l'idea e` di avere la linea superiore di questo prompt di due # linee sempre della larghezza del terminale. Questo viene fatto # calcolando la larghezza degli elementi di testo e riempendo come # appropriato o troncando a destra $PWD. # function prompt_command { TERMWIDTH=${COLUMNS} # Calcola la larghezza del prompt: hostnam=$(echo -n $HOSTNAME | sed -e "s/[\.].*//") # "whoami" e "pwd" includono un carattere "carriage return" finale usernam=$(whoami) let usersize=$(echo -n $usernam | wc -c | tr -d " ") newPWD="${PWD}" let pwdsize=$(echo -n ${newPWD} | wc -c | tr -d " ") # Aggiunge tutti gli accessori sotto ... let promptsize=$(echo -n "--(${usernam}@${hostnam})---(${PWD})--" \ | wc -c | tr -d " ") let fillsize=${TERMWIDTH}-${promptsize} fill="" while [ "$fillsize" -gt "0" ] do fill="${fill}-" let fillsize=${fillsize}-1 done if [ "$fillsize" -lt "0" ] then let cut=3-${fillsize} sedvar="" while [ "$cut" -gt "0" ] do sedvar="${sedvar}." let cut=${cut}-1 done newPWD="...$(echo -n $PWD | sed -e "s/\(^${sedvar}\)\(.*\)/\2/")" fi } PROMPT_COMMAND=prompt_command function termwide { local GRAY="\[\033[1;30m\]" local LIGHT_GRAY="\[\033[0;37m\]" local WHITE="\[\033[1;37m\]" local NO_COLOUR="\[\033[0m\]" local LIGHT_BLUE="\[\033[1;34m\]" local YELLOW="\[\033[1;33m\]" case $TERM in xterm*) TITLEBAR='\[\033]0;\u@\h:\w\007\]' ;; *) TITLEBAR="" ;; esac PS1="$TITLEBAR\ $YELLOW-$LIGHT_BLUE-(\ $YELLOW\${usernam}$LIGHT_BLUE@$YELLOW\${hostnam}\ ${LIGHT_BLUE})-${YELLOW}-\${fill}${LIGHT_BLUE}-(\ $YELLOW\${newPWD}\ $LIGHT_BLUE)-$YELLOW-\ \n\ $YELLOW-$LIGHT_BLUE-(\ $YELLOW\$(date +%H%M)$LIGHT_BLUE:$YELLOW\$(date \"+%a,%d %b %y\")\ $LIGHT_BLUE:$WHITE\$$LIGHT_BLUE)-\ $YELLOW-\ $NO_COLOUR " PS2="$LIGHT_BLUE-$YELLOW-$YELLOW-$NO_COLOUR " }
Questo è probabilmente il più attraente (e inutile) prompt che abbia mai creato. Poiché gli emulatori di terminale non implementano il salvataggio e ripristino della posizione del cursore, l'alternativa per mettere un orologio nell'angolo in alto a destra e di ancorare il prompt nella parte inferiore del terminale. Questo deriva dall'idea del prompt ampio quanto il terminale di cui sopra, disegnando una linea nella parte destra dello schermo dal prompt all'orologio. È richiesto un font VGA.
Nota: qui c'è una sostituzione strana, che potrebbe non venir stampata correttamente quando viene convertita da SGML ad altri formati: ho dovuto sostituire il carattere screen con \304 - normalmente avrei introdotto solo la sequenza "\304", ma in questo caso era necessario per fare questa sostituzione.
#!/bin/bash # Questo prompt richiede i font VGA. Il prompt e` ancorato in basso # al terminale, riempie la larghezza del terminale e disegna una linea # sul lato destro del terminale per collegarsi all'orologio # nell'angolo in alto a destra del terminale. function prompt_command { # Calcola la larghezza del prompt: hostnam=$(echo -n $HOSTNAME | sed -e "s/[\.].*//") # "whoami" e "pwd" includono il carattere "carriage return" finale usernam=$(whoami) newPWD="${PWD}" # Aggiunge tutti gli accessori sotto ... let promptsize=$(echo -n "--(${usernam}@${hostnam})---(${PWD})-----" \ | wc -c | tr -d " ") # Trova quanto aggiungere fra user@host e PWD (o quanto rimuovere # da PWD) let fillsize=${COLUMNS}-${promptsize} fill="" # Riempie la linea se il prompt non e` largo quanto il terminale: while [ "$fillsize" -gt "0" ] do fill="${fill}Ä" # La A con la dieresi (apparira` come una lunga linea se state # usando un font VGA) e` \304, ma l'ho "tagliata" e poi "incollata" # perche' Bash farebbe solo una sostituzione - che in questo caso e` # mettere $fill nel prompt. let fillsize=${fillsize}-1 done # Tronca a destra PWD se il prompt e` piu` largo del terminale: if [ "$fillsize" -lt "0" ] then let cutt=3-${fillsize} sedvar="" while [ "$cutt" -gt "0" ] do sedvar="${sedvar}." let cutt=${cutt}-1 done newPWD="...$(echo -n $PWD | sed -e "s/\(^${sedvar}\)\(.*\)/\2/")" fi # # Crea l'orologio e la barra lungo il lato destro del terminale # local LIGHT_BLUE="\033[1;34m" local YELLOW="\033[1;33m" # Posiziona il cursore per stampare l'orologio: echo -en "\033[2;$((${COLUMNS}-9))H" echo -en "$LIGHT_BLUE($YELLOW$(date +%H%M)$LIGHT_BLUE)\304$YELLOW\304\304\277" local i=${LINES} echo -en "\033[2;${COLUMNS}H" # Stampa linee verticali lungo il lato del terminale: while [ $i -ge 4 ] do echo -en "\033[$(($i-1));${COLUMNS}H\263" let i=$i-1 done let prompt_line=${LINES}-1 # Questo e` necessario perche' facendo \${LINES} all'interno di una # espressione matematica Bash (come $(())) sembra non funzionare. } PROMPT_COMMAND=prompt_command function clock3 { local LIGHT_BLUE="\[\033[1;34m\]" local YELLOW="\[\033[1;33m\]" local WHITE="\[\033[1;37m\]" local LIGHT_GRAY="\[\033[0;37m\]" local NO_COLOUR="\[\033[0m\]" case $TERM in xterm*) TITLEBAR='\[\033]0;\u@\h:\w\007\]' ;; *) TITLEBAR="" ;; esac PS1="$TITLEBAR\ \[\033[\${prompt_line};0H\] $YELLOW\332$LIGHT_BLUE\304(\ $YELLOW\${usernam}$LIGHT_BLUE@$YELLOW\${hostnam}\ ${LIGHT_BLUE})\304${YELLOW}\304\${fill}${LIGHT_BLUE}\304(\ $YELLOW\${newPWD}\ $LIGHT_BLUE)\304$YELLOW\304\304\304\331\ \n\ $YELLOW\300$LIGHT_BLUE\304(\ $YELLOW\$(date \"+%a,%d %b %y\")\ $LIGHT_BLUE:$WHITE\$$LIGHT_BLUE)\304\ $YELLOW\304\ $LIGHT_GRAY " PS2="$LIGHT_BLUE\304$YELLOW\304$YELLOW\304$NO_COLOUR " }