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'
xargs
man
여기서는 한 번 반환된 출력을 =(cmd)
포함하지 않고 임시 파일의 경로로 확장됩니다 (세 번째 형식).cmd
cmd
프로세스 교체) 에 국한됩니다 zsh
. 명령이 반환된 후 임시 파일은 자동으로 삭제됩니다 zathura
.
답변2
어쩌면 여기에 뭔가 빠졌을 수도 있습니다. 이 질문을 보기 전에는 fzf
(또는 zathura
그 문제에 대해) 해당 내용을 들어본 적이 없으며 테스트할 수 있는 내용이 내 시스템에 없습니다. 그런데… fzf
목록에서 항목을 선택하는 것이 포인트가 아닌가요? 다시 말하면, 그것은 fzf
선택의 요점이 아닙니다하나 목록에 있는 항목? 너무 멀리 가는 걸까요 xargs
? 이게 기본 논리 아닌가요?
select a man page
and then display it
?
fzf
GitHub의 페이지권장 사용법은 다음과 같습니다.$(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 &
편집: 실제 해결책은 아닙니다. 사용하지 마세요.