Mam skrypt ksh, który musi działać zarówno na systemie Linux, jak i Solaris. Próbuję pokolorować dane wyjściowe określonych poleceń. Działa na Linuksie (konkretnie RHEL6), ale nie na solaris (SunOS 5.10).
Komenda w systemie Linux (wyjściowy „test” ma poprawnie czerwony kolor):
[amartin@linuxbox:~]$ echo "test" | sed 's,.*,\x1B[31m&\x1B[0m,'
test
Polecenie na solaris (wyjściowy „test” nie jest kolorowy):
[amartin@sunbox:~]$ echo "test" | sed 's,.*,\x1B[31m&\x1B[0m,'
x1B[31mtestx1B[0m
Czy istnieje sposób na spreparowanie tego polecenia tak, aby wynik był czerwony, bez surowych kodów na wyjściu? Nie mogę zmienić polecenia „echo”, ponieważ jest to tylko wypełnienie polecenia, które faktycznie wykonuję.
cat |sed
zbyt thx!Byłoby łatwiejsze w użyciu
tput
lub
To ustawia pierwszy plan na czerwony, przebiegi,
somecommand
które następnie wyświetlą wynik na czerwono, a następnie skasują kolejność kolorów. Działa to przynajmniej zbash
,zsh
iksh
.Zobacz
tmux(1)
iterminfo(5)
więcej informacji o tym, co możesz zrobićtput
.źródło
Niektóre terminale (jak dla mnie bash w iterm) pozwalają ci naciskać klawisze „ctrl-v”, a następnie „ctrl + [”, i wstawi dosłowny znak ucieczki do ciągu wejściowego. Jeśli to zadziała, prawdopodobnie zobaczysz na ekranie znaki „^ [”, ale jeśli przesuniesz kursor wokół niego, potraktuje to jako jedną postać, ponieważ tak naprawdę jest za kulisami.
Aby zrozumieć, co się dzieje (i sprawdzić, czy jest to możliwe), możesz wpisać ctrl + v, a następnie ctrl + i. Powinieneś zobaczyć, że znak tabulacji został wstawiony do ciągu zachęty. Powodem jest historia CS: ale okazuje się, że naprawdę stara klawiatura miała ctrl + ja podłączyłem się, aby wysłać znak tabulatora; a klawisz tab wysyła również ten sam sygnał elektryczny.
Z tego powodu bash dla wielu terminali wciąż interpretuje niektóre kody Ctrl, aby odwzorować te same znaki.
Ctrl + I odwzorowuje znak tabulacji, a ctrl + [zdarza się pasować do znaku ucieczki ascii.
źródło