어제 제가 질문한 것에 대한 후속 답변입니다.디렉토리 목록에 파일 크기의 합을 표시합니다..
감사해요피레우스 제로그리고 올바른 방향의 점모리츠 한센, 나는 지금
function dir() {
ls -FaGl "${@}" | awk '{print; total += $4}; END {print "\t\ttotal: ",total/1024,"KB"}'
}
내에서는 .bash_profile
훌륭하게 작동합니다. 그러나 적어도 Linux에서는(아직 OSX에서는 시도해 볼 기회가 없었습니다) ssh
XP에서 PuTTY를 사용하면 이제 디렉토리 색상이 사라졌습니다. 색상 코드를 awk 문에 연결하는 방법이 있나요 print
?
고쳐 쓰다
Suk Mingde에게 감사드립니다.답변, --color=always
이전에 설정한 것처럼 추가하기만 하면 됩니다 auto
. 그러나 이제 디렉토리 목록 끝과 전체 행 사이에 공백이 있습니다.
[19:30:58 mattdmo@server ~/webapps/django15 ] $ dir
drwxr-xr-x 7 mattdmo 4096 Mar 24 20:28 ./
drwxr-xr-x 17 root 4096 Mar 18 20:15 ../
drwxr-xr-x 7 mattdmo 4096 Mar 14 14:57 apache2/
drwxr-xr-x 3 mattdmo 4096 Mar 14 14:57 bin/
drwxr-xr-x 2 mattdmo 4096 Mar 24 20:10 lib/
drwxr-xr-x 3 mattdmo 4096 Mar 14 14:57 myproject/
drwxrwxr-x 3 mattdmo 4096 Mar 24 20:28 pigimal/
total: 28 KB
[19:30:59 mattdmo@server ~/webapps/django15 ] $
이 문제 해결에 대한 제안 사항이 있습니까?
답변1
색상은 사용 시 유지되어야 합니다 ls --color=always
. 그것이 gnu에 특정한 것인지는 확실하지 않습니다. [OP 편집: 그렇습니다.]
ls
출력이 tty로 가는지 여부를 감지하는 경우입니다 .
그렇지 않은 경우 일반적으로 색상이 인쇄되지 않고 변환되지 않습니다.
"인쇄할 수 없는 문자"물음표까지. 이 작업은 추가하여 수행할 수 있습니다.-q
옵션.
이 주제에 대한 추가 정보:ls가 출력하는 라인 수.
일부 색상 데이터에 대한 gnu coreutils source ls;ref:
편집하다:
gnu coreutils ls의 경우: --color=always
OS X의 ls: 환경 변수를 설정 CLICOLOR_FORCE
하고 G
색상을 나타냅니다. 핵심 규정 준수ls IEEE 표준 1003.1-2001. 다른 옵션은 구현 간 신중한 확장입니다.
좋아요 이에 대해 더 깊이 연구했습니다. 내가 읽은 바에 따르면 사람들은 OS X에 gnu coreutils도 설치하지만 다음을 사용할 수도 있을 것 같습니다.원래.
이것OS X ls 매뉴얼 페이지상태:
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.
출처에서:
Mac OS X 10.8.2 소스 코드->file_cmds-220.7->ㅋㅋㅋ/
또한 이 코드를 보면 다음과 같이 설정할 수 있다는 것이 금방 분명해집니다.
CLICOLOR_FORCE
강제 색상.
매개변수와 setenv
색상을 먼저 구문 분석할 때 G
:
case 'G':
setenv("CLICOLOR", "", 1);
break;
구문 분석 후 argv
:
/* CLICOLOR is set AND is a tty OR */
if (getenv("CLICOLOR") && (isatty(STDOUT_FILENO) ||
etenv("CLICOLOR_FORCE")))
/* force cli color is set */
다음 섹션에서는 TERM이 설정된 경우 색상이 사용됩니다.
if (tgetent(termcapbuf, getenv("TERM")) == 1) {
echo $TERM
색상이 가능한 터미널을 생산해야 합니다. 하지만 정상적으로 색상이 나온다면 이런 현상이 나타날 것입니다.
---
마지막 업데이트로 편집:
확실하지 않습니다. 이상해요. 추가 줄이 있을 뿐만 아니라 total ...
애초에 줄도 없습니다. 다음과 유사한 출력을 검토하여 시작할 수 있습니다.
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);
}
'
}
당신에게 다음과 같은 것을 주어야합니다 -(~에서멍청 할 수도 있음 "-"
):
$ ./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 : ""