프로그램이 파이프되기 전에 시작됩니다.

프로그램이 파이프되기 전에 시작됩니다.
man -k . | fzf -e --tiebreak=begin | awk '{print $1}' | xargs man -Tpdf | zathura -
# searches for a man page and then outputs it as pdf to zathura

이 명령을 사용하면 사용자는 매뉴얼 페이지를 선택한 다음 해당 페이지를 표시할 수 있습니다. 사용자가 선택하기를 기다리는 동안 zathura가 블랭킹을 시작하여 zathura가 입력을 받게 된다는 점을 제외하면 잘 작동합니다. 초점을 zathura에서 다시 터미널로 변경한 다음 다시 zathura로 변경해야 하는 것은 정말 짜증나는 일입니다.

저는 스크립팅을 처음 접했기 때문에 제가 모르는 해결 방법이 있을 수 있다고 생각했습니다.

그렇지 않은 것이 좋습니다 ifne.

답변1

이것이 파이프에서 파이프로 동시에 명령을 실행하는 요점입니다.

순차적으로 실행되는 명령의 경우 크기가 무한한 파이프가 필요하거나 출력을 임시 파일에 저장해야 합니다.

을 사용하면 zsh다음을 수행할 수 있습니다.

zathura =(
  man -k . |
   fzf -e --tiebreak=begin |
   awk '{print $1}' |
   xargs -rd '\n' man -Tpdf
)

( 기본 구문 분석 모드를 원하지 않고 입력 없이 실행하고 싶지 않기 때문에 여기에 GNU 특정 -r옵션이 추가되었습니다 ).-d '\n'xargsman

여기서는 한 번 반환된 출력을 =(cmd)포함하지 않고 임시 파일의 경로로 확장됩니다 (세 번째 형식).cmdcmd프로세스 교체) 에 국한됩니다 zsh. 명령이 반환된 후 임시 파일은 자동으로 삭제됩니다 zathura.

답변2

어쩌면 여기에 뭔가 빠졌을 수도 있습니다. 이 질문을 보기 전에는 fzf(또는 zathura그 문제에 대해) 해당 내용을 들어본 적이 없으며 테스트할 수 있는 내용이 내 시스템에 없습니다. 그런데… fzf목록에서 항목을 선택하는 것이 포인트가 아닌가요? 다시 말하면, 그것은 fzf선택의 요점이 아닙니다하나 목록에 있는 항목? 너무 멀리 가는 걸까요  xargs? 이게 기본 논리 아닌가요?

select a man page
and then display it

?

fzfGitHub의 페이지권장 사용법은 다음과 같습니다.$(fzf args)

mp=$(man -k . | fzf -e --tiebreak=begin | awk '{print $1}')  &&  [ -n "$mp" ]  &&
                man -Tpdf "$mp" | zathura - &

사용자 입력에서 사용자가 선택한 매뉴얼 페이지 읽기 그런 다음보여. (명시적) 임시 파일은 필요하지 않습니다. (  2> /dev/null유익하다고 생각하시면 추가해주세요.)

답변3

#!/bin/sh
name=$( man -k . | fzf +i -e --tiebreak=begin | awk '{print ($2,$1)}' | tr -d "()")
if [ -n "$name" ]; then
man -Tpdf $(echo $name) | zathura - &
fi

더 나은 생각 끝에 나는 훌륭하게 작동하고 이제 모든 맨페이지를 지원하는 이것을 생각해냈습니다(예를 들어 맨페이지에 대한 태그를 고려 1p ls).

G-mans 답변은 더 복잡하고 위에서 언급한 추가 기능이 없는 것 같습니다(물론 요청한 적이 없기 때문에 이해할 수 있습니다).

답변4

출력을 내 /tmp/ 디렉토리로 리디렉션하고 zathura가 거기에서 읽을 수 있도록 하여 문제를 "해결"했습니다. 나는 또한 모든 것을 대본에 썼습니다.

   #!/bin/sh
   d=$(date +'%M_%S');
   man -k . | fzf -e --tiebreak=begin | awk '{print $1}' | xargs man -Tpdf > /tmp/man_${d};
   zathura /tmp/man_${d} 2> /dev/null &

편집: 실제 해결책은 아닙니다. 사용하지 마세요.

관련 정보