Ich habe eine Funktion in einem Bash-Skript message_offset, mit der der Status eines Bash-Skripts gedruckt wird.
Das heißt, Sie würden es als Übergabe einer Nachricht und eines Status wie diesen bezeichnen
message_offset "install font library" "[ OK ]"
und es würde in das Terminal gedruckt, wo printfdas %*sFormat verwendet wird, um immer das Zeichen ganz rechts mit einer [ OK ]Breite von 80 Spalten festzulegen, z. B. wäre die Ausgabe
install font library [ OK ]
update configuration file on server [ ERR ]
^
|
always
at 80
Wenn echoverwendet, würde die Ausgabe so aussehen
install font library [ OK ]
update configuration file on server [ ERR ]
Code:
#!/usr/bin/env bash
function message_offset() {
local message="$1"
local status="$2"
# compensate for the message length by reducing the offset
# by the length of the message,
(( offset = 80 - ${#message} ))
# add a $(tput sgr0) to the end to "exit attributes" whether a color was
# set or not
printf "%s%*s%s" "${message}" 80 "$status" "$(tput sgr0)"
}
Dies alles funktioniert in Ordnung, bis ich versuche, tputeinige Farbsequenzen in die Zeichenfolge einzufügen, dh "[ERR]" rot zu machen.
Es scheint, dass die printf "%*s"Formatierung die tput-Zeichenfolgen zählt, wenn der Offset eingestellt wird. Wenn ich also die Funktion so aufrufe
message_offset "update configuration file on server" "$(tput setaf 1)[ ERR ]"
Die Ausgabe sieht ungefähr so aus:
install font library [ OK ]
update configuration file on server [ ERR ]
weil printf "%*s"gesagt wird, hey, diese Zeichenfolge hat alle "[ ERR ]"Zeichen plus die "$(tput setaf 1)Zeichen, aber offensichtlich werden die "$(tput setaf 1)Zeichen nicht gedruckt, also beeinflussen Sie die Auffüllung nicht wirklich.
Gibt es eine Möglichkeit, die "Status" -Nachrichten tputfarbig zu gestalten und auch die Stilfarbsequenzen zu verwenden?
%*sund printf%-*sist?