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
に何らかの形で伝えると思います
あたり この答え @thrigのコメントに記載されているようにすることで、正しく出力することができました
yum list installed | xargs -n3 | column -t
Unbuffer(1)に付属しているexpectをインストールして実行します。
# unbuffer yum repolist
今日私はこれと戦った(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
RHEL 7.7では、他の回答はどれもうまくいきませんでした。そのため、sed
を使用して、次の行を@
文字のないすべての行に連結することにしました。
yum list installed | sed '/^[^@]*$/{N;s/\n//}'