「w | tail」は右マージンのテキストを切り捨てます(78文字)。

「w | tail」は右マージンのテキストを切り捨てます(78文字)。

要約: w | tail78列の後の行を切り取ります。

"w"コマンドを実行すると、期待どおりに機能します。しかし、出力を「テール」にパイプすると、出力は切り捨てられます。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環境変数を使用してデフォルト値を上書きできます。

一部のシェルは変数を好むzshbash設定し$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

おすすめ記事