W .*rc
plikach ludzi, które widzę online lub w różnych kodach, widzę wielu ludzi, którzy ręcznie używają sekwencji ucieczki ANSI zamiast ich używać tput
.
Zrozumiałem, że tput
jest bardziej uniwersalny / bezpieczny, więc zastanawiam się:
Czy istnieje jakiś obiektywny powód powinien wykorzystywać sekwencje w miejscu tput
? (Przenośność, odporność na błędy, nietypowe terminale ...?)
terminal
escape-characters
tput
Kapitanie Człowieku
źródło
źródło
printf
sekwencjami ucieczki ANSI, aletput
zawodzi (przynajmniej w moim pudełku).Odpowiedzi:
tput
radzi sobie z wyrażeniami (na przykład wsgr
isetaf
), które typowy skrypt-shell uznałby za mało użyteczne. Aby zorientować się, co jest zaangażowany, zobaczymy wynikuinfocmp
z-f
stosowana (formatowanie) opcja. Oto jeden z przykładów użycia tych ciągów z opisów terminfo xterm :Formatowanie dzieli rzeczy - skrypt lub program, aby zrobić to samo, musiałby podążać za tymi zwrotami akcji. Większość ludzi poddaje się i używa najłatwiejszych ciągów.
Funkcja 16 kolorów została zapożyczona z IBM aixterm, która mapuje 16 kodów dla każdego planu pierwszego i tła na dwa zakresy;
Prosty skrypt
a dane wyjściowe pokazują, jak to działa:
Liczby są podzielone, ponieważ aixterm używa zakresów 30–37 i 40–47, aby dopasować kolory ECMA-48 (znane również jako „ANSI”), i używa zakresu 90–107 dla kodów nie zdefiniowanych w standardzie.
Oto zrzut ekranu z użyciem Xterm
TERM=xterm-16color
, gdzie możesz zobaczyć efekt.Dalsza lektura:
infocmp
- porównaj lub wydrukuj opisy terminfotput
,reset
- zainicjuj bazę terminali lub zapytanie terminfoaixterm
Komendaźródło
Wychodząc z czasów, gdy platformy UNIX mogły mieć podłączone różne urządzenia, nadal wolę tput i jego przyjaciół od dosłownych sekwencji ucieczki.
Myślę, że prawdziwym powodem jest to, że większość ludzi po prostu nie wiem jak
tput
i jego powiązaneterminfo
/termcap
pliki i biblioteki.źródło
Jednym z powodów jest to, że
tput
jest to polecenie zewnętrzne, więc może działać wolniej niż wbudowane kody ucieczki powłoki. Inną rzeczą jest to, że można łatwo utworzyć jeden wkładka łączący kody ucieczki ANSI ze znakami ucieczki specyficznymi dla powłoki, na przykład wbash
monicie:podobnie w
zsh
:Tutaj wszystko jest jasne i zwarte. Z
tput
jednym trzeba by było podzielić go na wiele linii lub uczynić go znacznie dłuższą i złożoną, wykonująctput
wiele razy itp.źródło
PS1="$(tput setaf 2)\u@\h$(tput reset) >
$(tput sgr0)
na zakończenie, ale zgadzam się, że tput jest poprawą.