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 printf
das %*s
Format 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 echo
verwendet, 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, tput
einige 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 tput
farbig zu gestalten und auch die Stilfarbsequenzen zu verwenden?
%*s
und printf%-*s
ist?