루프 실행 프로그램의 출력 자르기

루프 실행 프로그램의 출력 자르기

내가 하고 싶은 것

xkb-switch -W레이아웃 그룹이 변경될 때까지 무한정 대기하고 그룹 이름을 표준 출력으로 인쇄하는 프로그램의 출력을 잘라내고 싶습니다 . 나는 출력의 처음 두 문자에만 관심이 있으므로 이를 사용하여 잘라내고 싶습니다 cut -c1-2.

내가 달성하려는 것

여기서 정말로 달성하고 싶은 것은 i3blocks를 사용하여 i3 열에 현재 키보드 레이아웃을 표시하는 것입니다. 하지만 xkb-switch가 레이아웃 언어(처음 두 문자)만 출력하는 것이 아니기 때문에 줄 길이가 변경되는 것을 원하지 않습니다. , 레이아웃 변형도 관심이 없습니다. 현재 내 블록은 다음과 같습니다.

[keymap]
label=
command=bash -c 'xkb-switch;xkb-switch -W'
interval=persist

내가 시도한 것

xkb-switch -W > foo & while inotifywait -qe modify foo; do cut -c1-2 foo; done

나는 xkb-switch의 출력이 파일로 리디렉션되는 이 oneliner를 구성하고 inotifywait를 사용하여 파일 수정을 기다리면서 cut을 호출하여 내가 얻고 싶은 두 문자를 출력하려고 했습니다.

하지만 원래 예상했던 대로 xkb-switch에 의해 파일이 파괴되지 않고(이것이 작동하지 않는 이유를 이해합니다) inotifywait가 "개정하다"파일이 수정될 때, 이는 제가 원하지 않는 것입니다. 후자는 일종의 리디렉션을 통해 수정될 수 있을 것 같습니다. 하지만 제가 시도하는 것이 최선의 접근 방식은 아닌 것 같습니다.

답변1

여기서 중요한 것을 놓치고 있거나 가장 간단한 해결책이 너무 뻔해 보입니다. 왜 일반 파이프를 사용하지 않는 걸까요?

xkb-switch -W | cut -c1-2

xkb-switch개행 문자가 출력되면 각 출력 줄의 처음 두 문자가 인쇄됩니다.

관련 정보