SSH経由でコンピュータに接続しssh machine
て実行すると、インストールされているyum list
すべての項目が期待どおりに出力されます。重要なことは、各項目が次のように1行にあることです。
xz-devel.i386 4.999.9-0.3.beta.20091007git.el5 base
xz-devel.x86_64 4.999.9-0.3.beta.20091007git.el5 base
xz-libs.i386 4.999.9-0.3.beta.20091007git.el5 base
xz-lzma-compat.x86_64 4.999.9-0.3.beta.20091007git.el5 base
ただし、これをリモートで実行したり、ssh machine 'yum list'
サーバーのgrepにパイプしたりすると、yum list | grep xz -C 3
出力行は次のように「切り捨てられて」短くなります。
xz-devel.i386 4.999.9-0.3.beta.20091007git.el5
base
xz-devel.x86_64 4.999.9-0.3.beta.20091007git.el5
base
xz-libs.i386 4.999.9-0.3.beta.20091007git.el5
base
xz-lzma-compat.x86_64 4.999.9-0.3.beta.20091007git.el5
base
このように線のサイズが縮小するのを防ぐにはどうすればよいですか?私の究極の希望はこれをパイプtee
し、ansibleを介してすべてのホストの出力ファイルに対していくつかの処理を実行することです。
SSH/パイプラインの一部である一種の「仮想ターミナル」によってこのようなことが発生するようです。接続が切断された状態で実行中の端末のサイズを小さくすると、同じ動作が得られるためですyum list
。したがって、パイプを追加すると、幅yum list
がX列にすぎないことを端末に知らせることができると仮定します。
答え1
すべてこの回答@thrigがコメントに提供されているとおり、次のようにして正しく出力されるようにすることができました。
yum list installed | xargs -n3 | column -t
答え2
unbuffer(1) に同梱されている見積もりをインストールし、以下を実行します。
# unbuffer yum repolist
答え3
今日(手術中)この問題で苦労し、yum check-update
一つを探しています。「CLOSED NOTABUG」バグジラレポートそして様々なPythonのヒント、私は別の解決策を思いついた。
script -q -c "stty cols 150; yum check-update" /dev/null > /path/to/output.txt 2>&1
または:
script -q -c "stty cols 150; yum check-update" /path/to/output.txt > /dev/null
150は、パッキングを防止するのに十分なランダムな大きな数である。必要に応じて上向きに調整します。-q
このオプションは、空でない出力ファイル名を使用する場合、最初の「$(date)へのスクリプトの開始」行を抑制します。
元の質問の場合、行は次のようになります。
script -q -c "stty cols 150; yum list" /dev/null
答え4
このrepoquery
コマンドを使用して、解析可能な出力を生成できます。たとえば、
repoquery '*' --queryformat='%{name} %{evr} %{from_repo}' | column -t
以下を提供します。
0ad 0.0.23b-13.fc32 fedora
0ad 0.0.23b-17.fc32 updates
0ad-data 0.0.23b-4.fc32 fedora
0xFFFF 0.8-3.fc32 fedora
2048-cli 0.9.1-9.fc32 fedora
2048-cli-nocurses 0.9.1-9.fc32 fedora
2048-cli-sdl 0.9.1-9.fc32 fedora
2ping 4.3-6.fc32 fedora
2ping 4.5-1.fc32 updates
389-ds-base 1.4.3.18-1.fc32 updates
...など。
(dnf
/とは異なり、yum
repoqueryは出力から重複パッケージを削除しません)