Durch die Verwendung sollten ls --color=always
die Farben erhalten bleiben. Ich bin mir nicht sicher, ob es gnu-spezifisch ist. [ Bearbeiten von OP: Ja, das ist es. ]]
Der Fall ist, dass ls
festgestellt wird, ob die Ausgabe zu tty ist oder nicht.
Wenn dies nicht der Fall ist, werden normalerweise keine Farben gedruckt und
"nicht druckbare Zeichen" nicht in Fragezeichen übersetzt. Dies kann durch die -q
Option hinzugefügt werden .
Mehr zum Thema: Anzahl der von ls ausgegebenen Zeilen .
gnu coreutils source ls; ref. zu einigen Farbdaten:
Bearbeiten:
Für gnu coreutils ls: --color=always
Für OS X ls: Umgebungsvariable festlegen CLICOLOR_FORCE
und G
Farbe bedeuten. Der Kern entspricht dem IEEE Std 1003.1-2001 . Andere Optionen sind Erweiterungen, die zwischen den Implementierungen vorsichtig sind.
OK. Ich habe mir das genauer angesehen. Nach dem, was ich gelesen habe, installieren die Leute auch Gnu Coreutils unter OS X, aber Sie verwenden wahrscheinlich das Original .
Die OS X-Manpages für ls geben Folgendes an :
CLICOLOR_FORCE
Color sequences are normally disabled if the output isn't directed to a
terminal. This can be overridden by setting this flag. The TERM
variable still needs to reference a color capable terminal however
otherwise it is not possible to determine which color sequences to use.
Aus der Quelle:
Mac OS X 10.8.2 Quelle -> file_cmds-220.7 -> ls /
Aus diesem Code wird auch schnell klar, dass man einstellen kann
CLICOLOR_FORCE
Farbe erzwingen.
Beim ersten Analysieren von Argumenten und setenv
Farben auf G
:
case 'G':
setenv("CLICOLOR", "", 1);
break;
Und nach dem argv
Parsen:
/* CLICOLOR is set AND is a tty OR */
if (getenv("CLICOLOR") && (isatty(STDOUT_FILENO) ||
etenv("CLICOLOR_FORCE")))
/* force cli color is set */
Wenn im nächsten Abschnitt TERM eingestellt ist, wird die Farbe verwendet:
if (tgetent(termcapbuf, getenv("TERM")) == 1) {
echo $TERM
sollte ein farbfähiges Terminal ergeben. Wenn Sie jedoch normale Farben erhalten, sollte dies der Fall sein.
--- ---.
Bis zum letzten Update bearbeiten:
Ich bin mir dann nicht sicher. Es ist seltsam. Nicht nur die zusätzliche Zeile, sondern auch, dass Sie total ...
am Anfang keine haben . Sie könnten damit beginnen, die Ausgabe von so etwas zu überprüfen:
function dir() {
/bin/ls -FaGl "${@}" | awk '
function chr2hex(chr) {
return sprintf("%02x", index(i2x, chr));
}
function str2hex(str) {
r = ""
for (i = 1; i <= length(str); ++i)
r = r chr2hex(substr(str, i, 1));
return r;
}
BEGIN {
i2x = ""
for (i = 0; i < 256; ++i)
i2x = sprintf("%s%c", i2x, i);
printf("FNR : %d\n", FNR);
printf("FIELDWIDTHS: \"%s\"\n", FIELDWIDTHS);
printf("FS : \"%s\"\n", str2hex(FS));
printf("RS : \"%s\"\n", str2hex(RS));
printf("OFS : \"%s\"\n", str2hex(OFS));
printf("ORS : \"%s\"\n", str2hex(OFS));
}
{
printf("%2d:%2d:%2d \"%s\"\n", FNR, NR, NF, $0);
total += $4;
}
END {
printf("%21s: %d %s\n", "total", total / 1024, "KiB");
printf("FNR : %d\n", FNR);
printf("From : \"%s\"\n", FILENAME);
}
'
}
Sollte dir so etwas geben wie - ( Von könnte "-"
zB gawk sein):
$ ./dir testdir
FNR : 0
FIELDWIDTHS: ""
FS : "20"
RS : "0a"
OFS : "20"
ORS : "20"
1: 1: 2 "total 24"
2: 2: 8 "drwxrwxr-x 6 mattdmo 4096 Apr 17 21:46 ./"
3: 3: 8 "drwxrwxr-x 8 mattdmo 4096 Apr 18 10:47 ../"
4: 4: 8 "drwxrwxr-x 2 mattdmo 4096 Apr 17 21:46 ab1/"
5: 5: 8 "drwxrwxr-x 2 mattdmo 4096 Apr 17 21:46 ab2/"
6: 6: 8 "drwxrwxr-x 2 mattdmo 4096 Apr 17 21:46 ab3/"
7: 7: 8 "drwxrwxr-x 2 mattdmo 4096 Apr 17 21:46 ab4/"
total: 24 KB
FNR : 7
From : ""
ls
du?ls --version
oder so ähnlich. Warum hast du zB nichttotal ...
in der ersten Zeile? Sicher, das ist das ganze Drehbuch?