Mam niestandardowy kolor PS1, w którym mam rzeczywiste polecenia powłoki w innym kolorze, aby szybko zobaczyć, jakie polecenia wpisałem, i oddzielić je od samego wyjścia polecenia.
Załóżmy, że kolor w PS1 jest ustawiony na „niebieski” w wierszu polecenia, a domyślny kolor w mojej powłoce to biały.
- Wpisuję polecenie np. Ls, (ls -l ma kolor niebieski)
- Wyjście, które generuje, pierwszy wiersz jest nadal niebieski
- Cała pozostała linia ma kolor biały
Chcę, aby wszystkie dane wyjściowe po poleceniu były „białe”.
Inny przykład:
- Wpisuję polecenie „kot”, kolor jest niebieski
- Wyjście pochodzi, całe wyjście jest niebieskie
Chciałbym, aby wynik był „biały”, a wiersz polecenia wpisałem „niebieski”
W przypadku niektórych poleceń jest w porządku, inne polecenia, ten sam kolor przelewa się do pierwszego wiersza wyniku, a następnie włącza się domyślny kolor i niektóre inne polecenia, całe wyjście (np. Cat) ma ten sam kolor.
Czy istnieje sposób, aby zachować tylko domyślne polecenia, które wpisałem w jednym kolorze, a resztę?
Jestem na OSX.
EDYCJA 1
Oto zrzut ekranu, do którego link @ derobert jest dołączony w komentarzach, który pokazuje, czego szukam.
Odpowiedzi:
Zasadniczo chcesz zresetować kolor terminala tuż przed wykonaniem polecenia przez bash. Można to zrobić za pomocą
trap
.Na przykład:
Bash wykonuje
DEBUG
pułapkę bezpośrednio przed poleceniem, więc spowoduje totput sgr0
(które resetuje atrybuty formatowania) uruchomienie przed każdym poleceniem.Jest
[[ -t 1 ]]
to kontrola bezpieczeństwa, aby upewnić się, że STDOUT jest rzeczywiście terminalem. Mogą występować przypadki, w których STDOUT basha nie jest podłączony do terminala (potokowanie, zdalne ssh itp.), Więc nie chcesztput
wysyłać kodów ucieczki terminala.źródło
.bashrc
(lub gdziekolwiek$PS1
jest ustawiony). Umieściłbym to tuż obok$PS1
definicji, żebyś wiedział, że są ze sobą powiązane.