Sto provando a impostare PS1
in modo che stampi qualcosa subito dopo l'accesso, ma preceduto da una nuova riga in seguito.Come impostare una nuova riga condizionale in PS1?
Supponiamo export PS1="\h:\W \u\$ "
, quindi prima volta (vale a dire, a destra dopo il login) si ottiene:
hostname:~ username$
Ho cercato qualcosa di simile nella mia ~/.bashrc
:
function __ps1_newline_login {
if [[ -n "${PS1_NEWLINE_LOGIN-}" ]]; then
PS1_NEWLINE_LOGIN=true
else
printf '\n'
fi
}
export PS1="\$(__ps1_newline_login)\h:\W \u\$ “
aspettandosi di ottenere:
# <empty line>
hostname:~ username$
Un esempio completo dall'inizio sarebbe:
hostname:~ username$ ls `# notice: no empty line desired above!`
Desktop Documents
hostname:~ username$
Per riferimento, il motivo per cui il comando non funziona è 1) che hai usato le virgolette doppie, e quindi __ps1_newline_login viene eseguito quando si esegue l'esportazione piuttosto che ogni pronta e 2) che se avessi usato le virgolette singole, la funzione sarebbe stata eseguita in una subshell a causa di $ (..) quindi qualsiasi variabile impostata non sarebbe visibile al di fuori di essa –
@thatotherguy grazie mille per questa spiegazione. Mi ha davvero aiutato a capire vari miei problemi. – Ali
@thatotherguy ripensandoci: sei assolutamente sicuro che '__ps1_newline_login' viene eseguito solo una volta, ma non tutte le volte? Ad esempio, '__git_ps1' usa questa stessa identica tecnica per impostare ogni prompt non solo inizialmente. – Ali