지금 막 dpkg --help
세 페이지의 출력물이 내 얼굴에 튀었습니다. 일반적인 사용법과 가장 일반적인 매개변수를 보여주는 처음 10줄에 관심이 있을 것입니다.
나는 --help
고유 인수를 사용하여 프로그램(모든 프로그램)을 실행할 때마다 출력이 .보다 길면 $(tput lines)
자동으로 파이프됩니다 less
. bash에서 이것이 쉽게 가능합니까?
편집하다:결국 나에게 가장 좋은 해결책은 zsh로 전환하는 것이었습니다. 유언장에 있는 다음 구절 중 하나를 ~/.zshrc
사용하면 각각 고유한 장단점이 있습니다.
# Modify the input line before it runs
function lessify() {
if [[ "$BUFFER" =~ " --help$" ]] ; then
BUFFER="$BUFFER | less -FX"
fi
zle accept-line
}
zle -N lessify_widget lessify
# Bind to the Enter key
bindkey '^M' lessify_widget
또는
# Alias --help ; ignore rest of the line
alias -g -- --help="--help | less -FX ; true "
게다가 나는 이 문제를 조사하는 데 절약한 것보다 더 많은 시간을 낭비했을 것입니다. 조금도 후회하지 마세요.
답변1
에서는 bash
디버깅 기능을 사용하여 이 작업을 수행할 수 있지만 이는 매우 취약한 솔루션이고 환경에 따라 크게 달라집니다.
확장 디버깅 활성화(참조:자세한 내용은 설명서를 참조하세요.):
shopt -s extdebug
helprun 함수를 만듭니다.
helprun() {
if [ "$#" -eq 2 ] && [ "$2" = '--help' ]; then
"$@" | less -F
return 1
fi
}
그런 다음 이를 사용하여 모든 명령을 캡처합니다.
trap 'helprun $BASH_COMMAND' DEBUG
이는 각 명령에 대해 실행되며 , 명령 helprun <command>
인 경우 파이프하여 명령이 실행되지 않도록 1을 반환합니다(감사합니다 ). 그렇지 않은 경우 정상적으로 작동합니다.--help
less
extdebug
제가 처리하지 못한 극단적인 경우가 있을 수도 있습니다...
답변2
또 다른 접근 방식은 동일한 작업을 수행하는 스크립트를 작성하는 것입니다.
#!/bin/bash
$1 --help | less -F
Help
예를 들어, 이를 호출하고 실행 가능하게 만든 다음 또는 같은 chmod +x Help
위치에 배치합니다 . 그런 다음 프로그램의 도움말을 나열하고 싶을 때마다 를 사용할 수 있습니다 .PATH
/bin
/usr/bin
Help <program>
<program> --help