"w | tail"은 오른쪽 여백의 텍스트를 자릅니다(78자).

"w | tail"은 오른쪽 여백의 텍스트를 자릅니다(78자).

요약: w | tail78열 뒤의 행을 잘라냅니다.

"w" 명령을 실행하면 예상대로 작동합니다. 그러나 출력을 "tail"로 파이프하면 출력이 잘립니다.78열 너비(오른쪽 여백 뒤의 내용은 잘림)

나는 setand env78(또는 79 또는 80) 의 값 TERM과 (xterm|ansi|vt100) 및 stty -a설정 tailw(좋아 보입니다)을 확인했습니다. $COLUMNS209로 설정합니다(하지만 상관없습니다. 100으로 설정했는데 결과는 같습니다).

저는 CentOS 5(커널 - 2.6.18)를 실행하고 있습니다. tail그리고 바이너리는 w나에게 괜찮아 보인다.

/usr/bin/w: ELF 64비트 LSB 실행 파일, AMD x86-64, 버전 1(SYSV), GNU/Linux 2.6.9용, 동적으로 링크(공유 라이브러리 사용), 제거됨

CentOS$ cat 80.txt
          1         2         3         4         5         6         7         8
012345678901234567890123456789012345678901234567890123456789012345678901234567890
----------+---------+---------+---------+---------+---------+---------+---------+
CentOS$ export COLUMNS=100
CentOS$ w | tail -5 | sed 's/./\./g'
.....................................................................
...............................................................................
...............................................................................
...............................................................................
...............................................................................

답변1

When 의 출력이 w터미널로 들어갑니다. w열 수에 대해 터미널 드라이버를 쿼리하고 이에 따라 너비를 조정하십시오.

출력이 터미널로 전송되지 않으면(예: 파이프로 전송하는 경우) 고정 너비 80열로 되돌아갑니다. 버전procps 3.3.2부터 시작$COLUMNS환경 변수를 사용하여 기본값을 재정의 할 수 있습니다 .

일부 쉘은 변수를 좋아 zsh하거나 bash설정 $COLUMNS하지만 내보내지는 않습니다. 그들에게 당신은 할 수 있습니다

COLUMNS=$COLUMNS w | tail

터미널 너비에 관계없이 줄이 잘리지 않도록 하려면 다음을 수행할 수 있습니다.

COLUMNS=512 w | tail

오래된 터미널을 가지고 있다면 w와이드 터미널을 에뮬레이트하는 것 외에는 선택의 여지가 없을 수도 있습니다. 그리고 zsh:

zmodload zsh/zpty
zpty W 'stty cols 512 -opost && w'
{zpty -r W} | tail
zpty -d W

터미널을 에뮬레이트할 수 있는 다른 것:

ssh localhost -t 'stty cols 512 -opost && w' | tail

expect -c 'set stty_init {cols 512 -opost}; spawn -noecho w; expect eof' | tail

관련 정보