Ich drucke eine Nachricht in einem Bash-Skript und möchte einen Teil davon einfärben. zum Beispiel,
#!/bin/bash
normal='\e[0m'
yellow='\e[33m'
cat <<- EOF
${yellow}Warning:${normal} This script repo is currently located in:
[ more messages... ]
EOF
Aber wenn ich im Terminal ( tmux
innen gnome-terminal
) laufe, werden die ANSI-Escape-Zeichen nur in \
Form gedruckt . zum Beispiel,
\e[33mWarning\e[0m This scr....
Wenn ich den Teil, den ich einfärben möchte, in einen printf
Befehl außerhalb des Here-Dokuments verschiebe, funktioniert dies. Zum Beispiel funktioniert dies:
printf "${yellow}Warning:${normal}"
cat <<- EOF
This script repo is currently located in:
[ more messages... ]
EOF
Von man bash
- Hier Dokumente:
Für Word werden keine Parameter- und Variablenerweiterungen, Befehlssubstitutionen, arithmetischen Erweiterungen oder Pfadnamenerweiterungen ausgeführt . Wenn Zeichen in Wörtern in Anführungszeichen gesetzt werden, ist das Trennzeichen das Ergebnis der Entfernung von Anführungszeichen in Word , und die Zeilen im Dokument hier werden nicht erweitert. Wenn das Wort nicht in Anführungszeichen gesetzt ist, werden alle Zeilen des hier beschriebenen Dokuments einer Parametererweiterung, einer Befehlssubstitution und einer arithmetischen Erweiterung unterzogen. Im letzteren Fall wird die Zeichenfolge \ <newline> wird ignoriert und
\
muss verwendet werden , um die Zeichen zu zitieren\
,$
und`
.
Ich kann nicht herausfinden, wie sich dies auf ANSI-Escape-Codes auswirken würde. Ist es möglich, ANSI-Escape-Codes in einem cat
ausgeblendeten Bash-Here-Dokument zu verwenden?
yellow=$'\e[33m'
oder yellow=$(printf '\e[33m')
(wie Sie es bereits tun) setzt das Escape-Zeichen direkt in die Zeichenfolge, um es zu testen.
'\e[33m'
für ein Terminal bedeutungslos? es hat nur Bedeutung für Befehle wie echo -e
oder printf
- die dann den "echten" Code erzeugen, der an das Terminal gesendet wird?
\e[33m
und wird in beiden Fällen normal ersetzt. Wenn Sie Grund zu der Annahme haben, dass es sich um Heredocs handelt, oder um einen echten Code, der das Verhalten zeigt, an dem Sie interessiert sind, bearbeiten Sie ihn bitte in.