web-dev-qa-db-ja.com

リモートのsshコマンドを介して出力を取得するときに、「yum list」の出力を1行に保つ方法は?

ssh machineを使用してマシンにSSHで接続し、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'を使用してリモートで実行するか、サーバーでyum list | grep xz -C 3を使用してgrepにパイプすると、出力の行が「切り捨てられ」、次のようにはるかに短くなります。

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の実行時に改行される端末サイズを縮小すると、同じ動作が得られるためです。したがって、パイプを追加すると、ターミナルの幅はX列のみであることをyum listに何らかの形で伝えると思います

9
Mitch

あたり この答え @thrigのコメントに記載されているようにすることで、正しく出力することができました

yum list installed | xargs -n3 | column -t 
2
Mitch

Unbuffer(1)に付属しているexpectをインストールして実行します。

# unbuffer yum repolist
2
Gerrit A. Smit

今日私はこれと戦った(yum check-update操作) "CLOSED NOTABUG"バグジラレポート およびさまざまな python hacks を見つけた後、さらに別の回避策を考え出しました:

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オプションは、null以外の出力ファイル名を使用する場合、最初の「$(date)で開始されたスクリプト」行を禁止します。

元の問題の場合、行は次のようになります。

script -q -c "stty cols 150; yum list" /dev/null
2
Jeff Schaller

RHEL 7.7では、他の回答はどれもうまくいきませんでした。そのため、sedを使用して、次の行を@文字のないすべての行に連結することにしました。

yum list installed | sed '/^[^@]*$/{N;s/\n//}'
0
akostadinov