Sto provando ad aggiungere un alias per lolcat che invocherà dopo ogni comando inserito nel terminale.
So solo come aggiungerlo per selezionare gli elementi, qualcuno sa come renderlo un output standard?
Sto provando ad aggiungere un alias per lolcat che invocherà dopo ogni comando inserito nel terminale.
So solo come aggiungerlo per selezionare gli elementi, qualcuno sa come renderlo un output standard?
Aggiorna
Ho messo la mia implementazione qui con le istruzioni di installazione:
Usa l'implementazione C di lolcat, ma l'ho modificato un po 'per renderlo psuedo-random.
VECCHIA RISPOSTA
Ecco come l'ho fatto. Aggiungi questo al tuo .bashrc
:
PS1_colorless=${PS1:-'\h:\W \u\$ '}
ESC=$(echo -e '3')
SOH=$(echo -e '\# the command number of this command
1')
STX=$(echo -e 'ESC=$(echo -e '3')
SOH=$(echo -e 'PS1_color_wrap='s/^[\[[[:digit:];]*m/^A&^B/g'
1')
STX=$(echo -e 'PS1_colorless=${PS1:-'\h:\W \u\$'}
PS1_newline="tr -d '\n'"
PS1_spacing=' '
PS1="\$(lolcat -F 6 -p 25 -f <<< \"$PS1_colorless\" | $PS1_newline | sed '$PS1_color_wrap')"
PS1+=$PS1_spacing
2')
PS1_color_wrap='s/'$ESC'\[[[:digit:];]*m/'$SOH'&'$STX'/g'
2')
PS1_color_wrap='s/'$ESC'\[[[:digit:];]*m/'$SOH'&'$STX'/g'
PS1="\$(lolcat -f <<< \"$PS1_colorless\" | sed '$PS1_color_wrap')"
Funziona eseguendo lolcat
in modo dinamico su $PS1_colorless
e facendo un sed
per aggiungere caratteri di controllo in modo che il ritorno a capo funzioni correttamente.
Ci vuole poco meno di 200 millisecondi per essere eseguito. Quindi potrebbe essere troppo lento per te. Ecco un esempio temporizzato:
HosceltodiutilizzarePS1
enonPROMPT_COMMAND
perchévolevoessereingradodiutilizzarelesequenzediescapepromptbashcome\h
,\W
,ecc.chenonsarebbepossibileconPROMPT_COMMAND
poichédevopassareaPS1
perl'espansioneprimadieseguirelolcat
.Puoiutilizzarealternativecome${HOSTNAME%%.*}
perimitareilcomportamentodi\h
manonpensochetupossafarloperqualcosadisimile
PS1_colorless=${PS1:-'\h:\W\u\$'}ESC=$(echo-e'3')SOH=$(echo-e'\#thecommandnumberofthiscommand
1')STX=$(echo-e'ESC=$(echo-e'3')SOH=$(echo-e'PS1_color_wrap='s/^[\[[[:digit:];]*m/^A&^B/g'
1')STX=$(echo-e'PS1_colorless=${PS1:-'\h:\W\u\$'}PS1_newline="tr -d '\n'"
PS1_spacing=' '
PS1="\$(lolcat -F 6 -p 25 -f <<< \"$PS1_colorless\" | $PS1_newline | sed '$PS1_color_wrap')"
PS1+=$PS1_spacing
2')
PS1_color_wrap='s/'$ESC'\[[[:digit:];]*m/'$SOH'&'$STX'/g'
2')
PS1_color_wrap='s/'$ESC'\[[[:digit:];]*m/'$SOH'&'$STX'/g'
PS1="\$(lolcat -f <<< \"$PS1_colorless\" | sed '$PS1_color_wrap')"
Usa -f
per forzare lolcat
a correre anche se l'output viene reindirizzato a sed
. lolcat
defaults per non mostrare nulla se l'output non è su un tty.
Dopo aver eseguito lolcat
, fa un sed
per circondare la sintassi del colore ansi come ESC[38;5;184m
( ESC
è il carattere di controllo 3
) con i caratteri di controllo SOH
e STX
quindi diventa SOHESC[38;5;184mSTX
. SOH
e STX
sono solo \[
e \]
rispettivamente nei caratteri di controllo prompt bash. Devo usare SOH
e STX
caratteri di controllo invece di \[
e \]
perché sto generando i colori dinamicamente. \[
e \]
non funzionerebbero perché sono tradotti per controllare i caratteri quando viene prima analizzato PS1
. \[
e \]
funzionerebbero se si usasse PROMPT_COMMAND
per generare l'output per PS1
ma poi non sarei in grado di usare \u
e \W
perché lolcat sarebbe stato eseguito prima di passare \u
a PS1
per l'espansione.
Per riferimento: link
I caratteri circondati da SOH
e STX
sono considerati caratteri non stampabili. Questo è necessario in modo che il ritorno a capo funzioni correttamente e non tratti il colore ansi come caratteri visibili reali.
Se vuoi usare caratteri letterali non stampabili, puoi sostituire
questo
%pre%con questo
%pre% Nota ^[
, ^A
e ^B
sono i caratteri letterali di controllo, quindi non puoi semplicemente copiare e incollare. Dovresti usare qualcosa come Vim per inserirli
In vim:
^[
== Ctrl + v Esc o Ctrl + v o 0 3 3
^A
== Ctrl + v Ctrl + a o Ctrl + v o 0 0 1
^B
== Ctrl + v Ctrl + b o Ctrl + v o 0 0 2
EDIT (un po 'più veloce in python) : Il Python sembra funzionare un po 'più veloce:
Cambiaquestevariabilineltuo.bash_profile:
%pre%Laversionepythonhanuoverigheaggiuntivenell'output,quindilerimuovocontr
.Rimuoveancheglispazifinali,quindihorimossoglispazifinalidaPS1_colorless
elihoaggiuntinuovamenteconPS1_spacing
.
Puoiottenerloqui:
Aggiornerò se riuscirò a far funzionare la porta C: link
Non riesco a farcela per costruire su mac os. Se qualcuno può farlo funzionare su linux o mac os, faccelo sapere.
Perché esattamente vorresti farlo è oltre a me, ma ci sono due modi per farlo:
1) puoi inserire il comando nella variabile PS1 (la variabile che controlla il tuo prompt)
o ...
2) Usa la variabile PROMPT_COMMAND (preferito)
Ad esempio, il tuo prompt potrebbe visualizzare automaticamente il nome host e il nome utente:
Allans-iMac:~ allan
Per vedere il codice, digita echo $PS1
e otteniamo:
\h:\W \u\$
Che equivale a hostname, directory di lavoro, nome utente e il simbolo del dollaro.
Per eseguire un comando (usando ls
come esempio) aggiungilo in allegato con i backtick e assegnalo a PS1:
PS1='ls'"\h:\W \u\$"
Ora, ogni volta che un comando viene eseguito, con o senza successo, emetterà il comando ls
prima di visualizzare il prompt.
Come sopra, ma questa volta imposti la variabile PROMPT_COMMAND con il comando che desideri eseguire. Ancora usando ls
come nell'esempio:
PROMPT_COMMAND=ls
Ora, senza dover modificare il valore PS1 (prompt), è possibile eseguire un comando ogni volta.
Puoi impostare uno di questi valori in modo permanente in .bash_profile che si trova nella directory home dell'utente.