Domanda

Nella mia situazione attuale, non è inusuale per me avere più computer UNIX mi collego ad esempio, molti utenti diversi a seconda della situazione, e di attraversare attraverso varie directory sulle macchine che fanno cose. Io uso ksh attraverso l'intera cosa.

Sono stato a giocherellare con il mio sollecito di recente, e sono stato in grado di ottenere per cambiare alcuni colori a seconda del mio nome utente corrente e la corrente del server. Tuttavia, quello che vorrei inoltre è per poter cambiare i colori in base alla mia directory corrente. Ad esempio, se io fossi nella directory "pippo", la richiesta deve essere di colore giallo, ma se io fossi nella directory "bar", la richiesta sarebbe magenta. In entrambi i casi, le sottodirectory dovrebbero contare, in modo da un semplice controllo stringa dovrebbe essere sufficiente.

Il problema che ho incontrato, tuttavia, è che quando ho eseguito il mio script .profile, in modo corretto i colori della directory - ma non è più aggiorna dinamicamente ogni volta che passa a un'altra directory - e io non sono sicuro di come prima ho fatto tutta la ramificazione, sono stato in grado di farlo stampare la mia directory di lavoro corrente correttamente anche dopo ho acceso le directory.

ho fatto un po 'googling, e trovare le informazioni per la bash, ma ksh sembra essere in gran parte ignorato. Come io non riesco a capire come fare questo per conto mio, devo portarlo alla comunità Stack Overflow, per aggiungerlo alla conoscenza futuro. Così, con la mia spiegazione prolisso, la "versione rapida" della mia domanda è la seguente:

In ksh, come posso impostare il mio prompt per visualizzare la directory di lavoro corrente e colorare il testo in base a dove la directory di lavoro corrente è? E 'anche possibile?

Altri suggerimenti

Perché non usare zsh? Si basa su ksh, ed è molto più potente. In zsh è possibile scrivere la funzione chpwd che viene implicitamente chiamato ogni volta che si cambia directory. In questa funzione è possibile controllare la directory corrente e impostare PS1 a quello che vuoi.

In alternativa (anche in ksh) è possibile creare un alias per il comando cd:

change_my_ps() {
  PS1=...
}
better_cd() {
  builtin cd "$@"
  change_my_ps
}
alias cd=better_cd

Qualcosa di simile. Io non sono sicuro che sia corretto, non mi ricordo la sintassi ksh.

Per visualizzare la directory corrente in ksh, mettere questo nel file .profile: export PS1 = "\ $ PWD" Che aggiornare dinamicamente quando si cambia directory senza gingillarsi con le funzioni.

Dal momento che nessuno in realtà ha risposto la parte che riguarda il colore, ecco come lo farei. Non riesco a colorare il testo, così ho incluso anche uno screenshot del mio terminale.

pagina di Wikipedia su codici di escape ANSI per l'elenco completo dei codici colore e print --man e printf --man per i dettagli di stampa di sequenze di escape in ksh.

(Si noti che ksh93v, attualmente in versione beta, conterrà una lingua pronta base (credo) sulla bash, che renderà questo tipo di cose un po 'più facile, anche se credo che sarà probabilmente ancora bisogno di usare qualcosa di simile questa funzione fare complesse istruzioni condizionali come questo.)

> cat ~/scripts/prompt    
function prompt
{
    set -eu
    typeset c=
    case $PWD in
        */foo) c=3;; # yellow
        */bar) c=5;; # magenta
    esac
    print "\E[3${c}m$PWD\E[m > "
}
PS1='`prompt`'
> . ~/scripts/prompt
/Users/adavies > cd foo  
/Users/adavies/foo > cd ../bar
/Users/adavies/bar > 

entrare descrizione dell'immagine qui

Io uso questo:

function chdir
{
   cd "$@"
   CWDH=${PWD%/*}
   PS1="($_time)$hname:${CWDH##*/}/${PWD##*/} ->"
   export PS1
}
alias cd=chdir
chdir .

Ignora il tempo e hname, ma il resto dovrebbe funzionare per voi. Modifica dei colori sta per essere terminale dipendente. È necessario conoscere i codici di escape per ogni colore per il terminale che verrà utilizzato. Se sai che sempre e solo utilizzare un xterm, sarà più facile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top