명령 매개변수를 기록 검색 모드로 변환

명령 매개변수를 기록 검색 모드로 변환

h + 검색 모드를 입력하여 터미널 기록을 빠르게 검색할 수 있는 별칭이 있습니다. alias h='history | /usr/bin/grep '

이것이 작동하는 방식이지만 grep 인스턴스를 더 추가하지 않으면 더 많은 검색 패턴을 추가할 수 없습니다. 예를 들어h pacman | grep wine

다른 가능한 매개변수를 검색 패턴으로 변환하도록 조정하고 싶습니다. 예를 들어h pacman wine

관찰: 이를 달성하기 위한 기성 솔루션이 있다는 것을 알고 있지만 어떻게 해야 할지 모르기 때문에 배우고 싶습니다.

답변1

이렇게 하려면 쉘 별칭 대신 쉘 함수가 필요합니다.

function h() {
  code="cat ~/.bash_history"
  for arg in $@ ; do
    code="$code | grep $arg"
  done
  eval "$code"
}

.bashrc이 함수를 별칭 지시문이나 일반적으로 별칭 지시문을 작성하는 모든 위치에 배치할 수 있습니다 .

답변2

여기서 핵심은 여러 모드의 경우 일반적으로 옵션을 사용하여 각 모드를 지정 grep해야 한다는 것입니다( 단지 ). 두 가지 옵션:-egrep -e pacman -e winegrep pacman wine

  1. 별칭은 매개변수를 지원하지 않으므로 다음과 같은 함수가 사용됩니다.

    h () {
        local args=()   # local array to store argument with -e for grep
        for i
        do
           args+=(-e "$i")  # tack on the -e for each argument
        done
        history | grep "${args[@]}"
    }
    

    이는 모든 매개변수가 모드라고 가정합니다 grep.

  2. 별칭을 계속 사용하고 -e자신만의 별칭을 추가하세요.

     h -e pacman -e wine
    

    grep이 방법으로 원하는 다른 옵션을 추가할 수도 있습니다 (예: -C 3결과 주위에 일부 컨텍스트 표시).

관련 정보