Mùi w | Đuôi văn bản chops ở lề phải (78 ký tự)


7

Tóm tắt: w | tail sườn hàng sau cột thứ 78.

Khi tôi chạy lệnh "w", nó hoạt động như mong đợi. Tuy nhiên, khi tôi chuyển đầu ra thành "đuôi", nó sẽ cắt đầu ra thành 78 cột rộng (cắt bất cứ thứ gì sau lề phải).

Tôi đã kiểm tra setenvcho bất kỳ giá trị nào của 78 (hoặc 79 hoặc 80), cũng như TERM(xterm | ansi | vt100), và stty -acác cài đặt, cũng như tailw(chúng có vẻ ổn). $COLUMNSđược đặt thành 209 (nhưng điều này không thành vấn đề ... Tôi đặt nó thành 100 với cùng kết quả).

Tôi đang chạy CentOS 5 (kernel - 2.6.18). Các nhị phân tailwnhìn OK với tôi.

/ usr / bin / w: ELB 64 bit thực thi LSB, AMD x86-64, phiên bản 1 (SYSV), cho GNU / Linux 2.6.9, được liên kết động (sử dụng libs được chia sẻ), bị tước

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

Hãy thử alias w='w | more. Điều đó đã giúp tôi rất nhiều.
ott--

Câu trả lời:


8

Khi wđầu ra đi đến một thiết bị đầu cuối. wtruy vấn trình điều khiển đầu cuối cho số lượng cột và điều chỉnh độ rộng phù hợp.

Khi đầu ra không đi đến một thiết bị đầu cuối, chẳng hạn như khi nó đi đến một đường ống, nó sẽ trở lại chiều rộng cố định là 80 cột. Các phiên bản procps kể từ 3.3.2 cho phép ghi đè mặc định đó bằng $COLUMNSbiến môi trường.

Một số shell thích zshhoặc bashđặt $COLUMNSbiến, nhưng không xuất nó. Trong đó, bạn có thể làm

COLUMNS=$COLUMNS w | tail

Nếu bạn không muốn các dòng bị cắt ngắn bất kể thiết bị đầu cuối rộng bao nhiêu, bạn có thể làm:

COLUMNS=512 w | tail

Nếu bạn đã già đi w, có lẽ bạn sẽ không có lựa chọn nào khác ngoài việc mô phỏng một thiết bị đầu cuối rộng. Với zsh:

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

Những thứ khác có thể mô phỏng một thiết bị đầu cuối:

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

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

Tôi đang sử dụng bash 4.2.0 (1), w phiên bản 3.2.7 trong CentOS 5.3. Biến thể COLUMNS không tạo ra sự khác biệt nào
RSFalcon7

Nếu tôi xuất biến COLUMNS, bạn có nên sử dụng cài đặt đó không? [đã thử điều này]
Razzlephrazz

COLUMNS=0không làm việc cho tôi. Tuy nhiên, COLUMNS=1000không.
peterph

@Razzlephrazz, vâng, mặc dù điều đó cũng sẽ ảnh hưởng đến các lệnh khác. Vấn đề của bạn có lẽ là bạn đã có một phiên bản w quá cũ để hỗ trợ ghi đè chiều rộng.
Stéphane Chazelas

Cảm ơn, Stephane. Bạn có biết làm thế nào tôi có thể tìm ra "w" của mình bao nhiêu tuổi không và khi nào thì phiên bản được sửa lỗi? Đây rõ ràng là một lỗi trong lệnh "w". Hoặc có lẽ phiên bản lệnh w của tôi sử dụng var ENV khác thay vì COLUMNS.
Razzlephrazz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.