터미널에서 줄 바꿈을 비활성화하는 방법은 무엇입니까?


55

bash 쉘을 사용하여 큰 로그 파일을 볼 필요가 있습니다. less파일을 여는 데 사용 했지만 줄이 너무 길기 때문에 일종의 줄 / 단어 줄 바꿈이 진행됩니다.

파일은 Log4J 로그이므로 각 줄의 시작 부분에 패턴이 있으므로 줄 바꿈이 있으면 출력을 분석하기가 어려워 less -S긴 줄을 자르기 시작했습니다 .

그러나 이제는을 사용해야 tail -f하며 출력을 줄 바꿈합니다. 모든 명령에 대해 bash 쉘에서 줄 바꿈을 비활성화 할 수 있습니까?

참고 : 이스케이프 시퀀스를 언급하는 다른 질문에 대한 답변이 echo -ne '\e[?7l'있지만 bash에서는 작동하지 않는 것 같습니다.


4
이것은 선택한 쉘 (bash)과 관련이 없지만 터미널 선택 (xterm, Terminal, gnome-terminal, konsole,…)에 따라 달라질 수 있습니다. '터미널', '쉘', 'tty'및 '콘솔'의 정확한 차이점
Gilles

4
Gilles가 언급했듯이 이는 터미널 에뮬레이터의 문제입니다. 예를 들어에 screen"wrap"명령이 있습니다. 에는 자동 줄 바꿈을 방지 xterm하는 -aw옵션이 있습니다. 다른 터미널 에뮬레이터에 대한 X 리소스가있을 수 있습니다. 어떤 에뮬레이터를 사용하고 있습니까?
Arcege

사용하고 gnome-terminal있습니다.
nunaxe

1
@Arcege : 사실, 그것은이다 +aw에 대한 xterm:)하지만,이에 대한 문제를 해결 출력 (에, 예 ls -l를 들어, 잘 작동 TPB에서 긴 윈도우 틱 이름에 무리와 함께) 입력 명령을 입력 할 때, 당신 아마 여전히 랩을 원합니다 (또는 적어도 현재 상황은 원하지 않습니다 +aw: "열 경계"를 넘어서 쓴 후 거대 GFX 버그로 되돌아 가십시오).
Emanuel Berg

그건 그렇고, 줄 바꿈을 비활성화 urxvt하거나 rxvt비활성화 할 수 없습니다 .
Emanuel Berg

답변:


7

실제로 필요한 tail -f것이 less +F있습니까? 인터랙티브 호출기를 여전히 원하는 것처럼 들리므로 나 less자신을 다시 구현 하는 것보다 고수하는 것이 훨씬 쉬울 것 같습니다 .

마지막 메모 : 고려 tail -f file | less했습니까?


내가 함께 어떤 경험을하게 screen하고 xterm그 에뮬레이터 라인 랩을 방지 할 수있는 옵션을 가지고있다. 그러나 선을 자르고 선의 꼬리를 숨기는 것에는 큰 차이가 있으므로 원하는 경우 볼 수 있습니다. 사용 tail -f file | less -S하지 않는 것처럼 보이지만 사용하는 -f것이 가장 좋지만 내가 찾은 최고의 솔루션입니다.
nunaxe

@Boris Marcos의 답변이 더 낫습니다. less직접 사용 합니다.
AnthonyD973

51

시험:

less -S +F filename

  • 을 누르면 Ctrlc테일링이 중지되고 이제 커서 키를 사용하여 왼쪽과 오른쪽으로 이동할 수 있습니다.
  • 을 눌러 Shiftf광미를 재개
  • 누르면 Ctrlc, q종료합니다

대단해! 터미널이 두 화면에 걸쳐 있었지만 어제 이것을 읽었으므로 넓은 출력을로 파이프합니다 less -S. 랩탑에서도 매우 유용합니다.
Jonatan Öström


15

COLUMNS변수가 정의되어 있다고 가정하면 실행할 수 있습니다.

tail -f your-app.log | cut -c -$COLUMNS

그렇지 않으면 $COLUMNS에서 얻은 터미널의 열 너비로 대체 하십시오 stty -a.


2
$COLUMNS( SIGWINCH다음 프롬프트에서만 즉시 업데이트되지 않음 ) 및 stty -a(스크립트에서 사용하기가 더 어렵다 )의 또 다른 대안 은 tput cols입니다.
manatwork

감사합니다. 그것은 작동하지만 선을 자르고 긴 선의 끝을 볼 수 없습니다. IS는 할 수 cut처럼 행동 less -S긴 선이 버퍼링되는 경우 우리는 방향 키를 사용하여 전체 라인을 볼 수 있습니까?
nunaxe

음, 그렇게 간단하지 않습니다. 유선 솔루션은 예를 들어 동작을 모방 한 스크립트 또는 스크립트 screen가있는 두 개의 별도 창 으로 생각 tail -f | cut합니다 less. 그러나 현재 해결책이 없습니다.
enzotib

1
참고 : cut은 바이트 수만 계산합니다. 와 달리 less -S, 컬러 텍스트 또는 ANSI 이스케이프가있는 모든 것을 망칠 것입니다. 유니 코드도 망칠 수 있습니다.
ELLIOTTCABLE 2016 년

예, less -S컬러 텍스트에 더 유용합니다. less -S -E즉시 종료 하는 데 사용할 수 있습니다 . $ COLUMNS에서 컬러 출력물을 자르는 데 유용합니다.
blueyed

4

당신은 라인에 대한 포장 해제 할 수 있습니다 less, tail그리고 리눅스 태양 아래 다른 모든 명령을 :

tput rmam

줄 바꿈을 복원하려면 다음을 사용하십시오.

tput smam

3

터미네이터 (http://software.jessies.org/terminator/) 터미널 에뮬레이터를 사용하면 긴 줄을 줄 바꿈 할 수 없으며 가로 스크롤이 가능합니다 (하지만 Java로 작성 됨).


어떻게 활성화합니까? 기본적으로 작동하지 않는 것 같습니다.
defhlt

이 글을 쓰는 시점에서 가로 스크롤은 기본적으로 켜져 있습니다. 훌륭한 크로스 플랫폼 권장 사항. 감사!
user7089

이 기능을 활성화하는 방법을 보여줌으로써이 답변을보다 잘 작성하십시오. 환경 설정에서 검색했는데이 옵션을 찾을 수 없습니다. FWIW, 나는 달리고있다 terminator v1.91.
AnthonyK

2
@AnthonyK 이름을 공유하는 두 개의 관련이없는 터미널 에뮬레이터가있다 terminator, 이것 gentledevil가 참조되고 하나 당신이 사용하고 있습니다.
jlliagre

3

여기에 두 가지 좋은 답변 / 예

http://www.commandlinefu.com/commands/view/1710/tail-a-log-file-with-long-lines-truncated

tail -f logfile.log | cut -b 1-80

tail -f logfile.log | cut -b -$(tput cols)

한 가지주의 사항 : 적어도 Mac 컷의 내장 터미널에서 탭 문자를 잘 처리하지 못하는 것 같습니다. 예를 들어 8 개의 공백으로 표시되는 것처럼 보이지만 4 개의 너비 또는 이와 비슷한 것으로 계산합니다. 즉, 터미널의 너비가 80 자이고 출력에 한 줄에 여러 개의 탭이 포함되어 있으면 너비를 60 또는 이와 유사한 것으로 설정해야합니다. YMMV.


2

아래 옵션을 사용하십시오 less. 지정된 경우 자동 줄 바꿈을 비활성화하고 텍스트 색상을 유지합니다.

less -SR +F filename


2

이 페이지에는 -f ...를 사용하여 파이핑 테일의 몇 가지 예가 있습니다. 내 테스트에서 실제로 파이핑이 필요한 경우 (예 : grep와 같은 더 많은 것을 파이프 해야하는 경우) 다음과 같은 것을 사용할 수 있습니다 :

watch -n 1 'tail -n $(($LINES-3)) file.log | cut -c -$COLUMNS'

성능에 가장 적합하지는 않지만 작동합니다 ... 그렇지 않으면 추가로 배관이 필요하지 않으면 다음과 같은 다른 것을 사용할 수 있습니다.

less -S +F file.log

2

질문에서 벗어난 많은 의견이 있습니다. OP의 질문

그러나 이제는을 사용해야 tail -f하며 출력을 줄 바꿈합니다. 모든 명령에 대해 bash 쉘에서 줄 바꿈을 비활성화 할 수 있습니까?

모든 랩핑 기능이있는 것은 아니라고 자동 랩 기능에 대해 언급했습니다. 혹시. 그러나 ( 터미널 설명을 문서화하지 않은 터미네이터 외에 ) 제공된 모든 예제는 xterm, rxvt 및 일부 유사하거나 자손입니다. 그것들은 모두 관련이 있습니다.

+aw의 옵션 xterm에 해당합니다 autoWrap자원. 매뉴얼을 참고하면

   autoWrap (class AutoWrap)
           Specifies  whether  or  not  auto-wraparound should be enabled.
           This is the same as the VT102 DECAWM.  The default is "true".

과에서 XTERM 제어 시퀀스 는 말한다

CSI ? Pm h
          ...
          DEC Private Mode Set (DECSET).
            Ps = 7  -> Wraparound Mode (DECAWM).

VT100과 호환되는 터미널은이 기능을 지원하기 때문에 "터미널 선택에 따라 달라지지 않습니다". 예를 들어 xterm 및 rxvt가이를 수행합니다. 다른 사람들도 마찬가지입니다.

이 기능이 OP에 유용한 지 여부 는 논란의 여지가 있습니다. 줄 바꿈 억제는 문제의 한 측면 일뿐입니다.

  • 쉘은 터미널의 너비를 알고 있지만 COLUMNS"큰"값 으로 설정 하여 재정의 할 수 있습니다 .
  • 물론 이는 응용 프로그램이 올바른 마진을 작성하는 데 많은 시간을 소비한다는 것을 의미합니다.
  • OP는 아마도 응용 프로그램이 왼쪽 / 오른쪽으로 스크롤하여 넓은 터미널을 사용할 수 있다고 가정했습니다. (터미네이터는이 작업을 부분적으로 수행하지만 cat로그 파일을 화면에 표시하는 데 터미널을 사용하는 사용자를 제외하고 다른 단점으로 인해 취소합니다 .)
  • OP가 실제로 찾고있는 것은 특히 로그 파일을 볼 때 줄 바꿈을 비활성화하도록 지시 할 수있는 도구 세트입니다. 터미널이 일반적인 용도로 충분히 작동하면 터미널 내에서 사용하는 도구의 선택과 관련이 없습니다.

필요한 기능을 수행 할 수있는 호출기 (예 : 기능에 나열된 멀티 테일) 가 있습니다.

줄 바꿈 기능을 해제 한 후 커서 키를 사용하여 왼쪽 / 오른쪽으로 스크롤 할 수 있습니다.

Ncurses 기반이기 때문에 인용 된 모든 터미널에서 작동해야합니다.


1

vi

내부 vi 타입

:set nowrap

나는 당신에게 꼬리를 행동처럼 줄 vi를위한 플러그인이 있다고 믿습니다.


-1

실제로 전체 줄을 보려면 Atom 또는 Notepad ++와 같은 텍스트 편집기에 텍스트를 복사하여 붙여 넣고 줄 바꿈을 비활성화 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.