GNU/Linux >> Znalost Linux >  >> Linux

Poté, co jsem upravil .bashrc, mám ve výzvě duchy?

Tato otázka zde již obsahuje odpovědi :Proč je můj bash prompt při procházení historie bugován? [duplikát]

(2 odpovědi)
Uzavřeno před 4 lety.

Do svého ~/.bashrc jsem přidal následující :

export PS1="\e[0;35m[\[email protected]\h \W]\$ \e[m "
echo -e "\e[0;35mYOU ARE ON THE LIVE SERVER !!\e[0m"

bohužel teď, pokaždé, když do bash vložím něco dlouhého, zvlní se to a tab postavy se objevují po celé obrazovce a řádky se navzájem požírají, ví někdo proč?

Přijatá odpověď:

V minulosti jsem měl také problém s barevnými kódy ANSI, které se pletly s navigací v příkazovém řádku; musíte umístit kódy ANSI kolem \[ \] aby příkazový shell věděl, jak je (ne) vzít v úvahu jako součást vstupního řetězce.

Jako v:

export PS1="\[\e[0;35m\][\[email protected]\h \W]\$\[\e[m\] "
echo -e "\[\e[0;35m\]YOU ARE ON THE LIVE SERVER !!\[\e[0m\]"

Nějaké vysvětlení, proč shell potřebuje \[ a \] :Aby mohl shell nakreslit výzvu na správné pozice v matici znaků terminálu, potřebuje znát správnou délku řetězce výzvy, což je množství tisknutelného postavy, tj. E. neřídí znaky ani sekvence znaků.

Shell však neví, které sekvence znaků terminál považuje za tisknutelné. Proto je potřeba poskytnout shellu rady, aby bylo možné rozlišit mezi tisknutelnými a netisknutelnými sekvencemi, což je účelem \[ a \] .


Linux
  1. Přizpůsobení prostředí Bash

  2. Pointa externího příkazu `cd`?

  3. Účel .bashrc a jak to funguje?

  1. Moc (Shell) lidem

  2. Proč Bashrc kontroluje, zda je aktuální shell interaktivní?

  3. SELinux v reálném světě

  1. Je Shell přenosný ke spuštění příkazu na stejném řádku po přiřazení proměnné?

  2. Přednost logických operátorů Shell &&, ||?

  3. Chápete význam `$_`?