원격 ssh 명령을 통해 출력을 가져올 때 yum 목록 출력을 한 줄로 유지하려면 어떻게 해야 합니까?

원격 ssh 명령을 통해 출력을 가져올 때 yum 목록 출력을 한 줄로 유지하려면 어떻게 해야 합니까?

SSH를 통해 컴퓨터에 연결 ssh machine하여 실행하면 yum list설치된 모든 항목이 예상대로 출력됩니다. 중요한 점은 각 항목이 다음과 같이 한 줄에 있다는 것입니다.

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" 버그질라 보고서그리고 다양한파이썬 팁, 나는 또 다른 해결 방법을 생각해 냈습니다.

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/ 와 달리 yumrepoquery는 출력에서 ​​중복 패키지를 제거하지 않습니다)

관련 정보