영구 쉘 매개변수

영구 쉘 매개변수

나는 종종 일련의 매개변수에 대해 일련의 명령을 실행하는 자신을 발견합니다.

예를 들어:

$ nmap -Pn -sS 192.168.1.5
$ ssh 192.168.1.5
$ curl 192.168.1.5
$ wget -r 192.168.1.5

매개변수를 변수에 넣어 작업 속도를 높일 수 있습니다.

$ a=192.168.1.5
$ nmap -Pn -sS $a
$ ssh $a
$ curl $a
$ wget -r $a

다음과 같은 몇 가지 기능을 사용하여 속도를 더욱 높이세요.

$ more .zshrc
...
paa() { PERSIST_ARGS+=("$@"); }
pa() { eval "$@" "${PERSIST_ARGS[@]}"; }
...
$ paa 192.168.1.5
$ pa nmap -Pn -sS
$ pa ssh
$ pa curl
$ pa wget -r

속도를 더 높일 수 있는 방법이 있나요? 예를 들어,

$ <start special mode> 192.168.1.5
$ nmap -Pn -sS
$ ssh
$ curl
$ wget -r
$ <exit special mode>

나는 bash또는 zsh해결책을 찾고 있습니다. 솔루션은 모든 명령 세트를 사용해야 합니다.

답변1

Alt-_마지막 명령의 마지막 단어가 삽입되었습니다. 나에게는 이것으로 충분했지만 공백, 마지막 단어 및 줄 허용( Enter)을 삽입하기 위해 또 다른 키 바인딩을 추가할 수 있습니다.

그리고 tcsh또는 zsh(에 대해 Alt-S, S에 대해 same):

bindkey -s '\es' ' \e_\r'

그리고 bash:

bind '"\es": " \e_\r"'

그런 다음 다음을 입력하십시오.

$ nmap -Pn -sS 192.168.1.5
$ ssh<Alt-S>
$ curl<Alt-S>
...

에서 zsh그리고 tcsh적어도 에서수치적 인수(즉, 앞에 추가하면 Alt-<number>) 공백 문자에 적용되는데 이는 그다지 유용하지 않습니다( Alt-3Alt-S3개의 공백을 삽입하고 마지막 단어를 한 번 삽입하고 줄을 허용합니다). 다음 중 하나를 삽입하는 것이 더 유용할 것입니다.N마지막 명령의 마지막 단어, 또는N마지막 명령 또는 마지막N마지막 명령의 단어입니다.

최소한 zsh매크로를 사용하는 대신 새 위젯을 정의할 수 있습니다. 예를 들어:

use-last-word() {
  LBUFFER+=" "
  zle insert-last-word
  zle accept-line
}

zle -N use-last-word
bindkey '\es' use-last-word

Alt-3Alt-S마지막 명령의 마지막 세 번째 단어가 삽입됩니다 .

마지막에서 세 번째 명령 에 마지막 단어를 삽입하려면 다음을 수행하십시오.

use-last-word() { 
  LBUFFER+=" "
  local n=$NUMERIC
  unset NUMERIC
  repeat ${n:-1} zle insert-last-word
  zle accept-line
}

마지막 명령의 마지막 3단어를 삽입하려면:

use-last-word() { 
  for ((NUMERIC=${NUMERIC:-1}; NUMERIC; NUMERIC--)) {
    LBUFFER+=" "; zle insert-last-word
  }
  zle accept-line
}

답변2

내 자신의 질문에 이렇게 대답하는 것은 기분이 좋지 않지만 해결책이 있습니다.

pst() {
    [ $# = 0 ] && return 1

    if [ -n $ZSH_VERSION ]; then
        local read=vared
    else
        local read=read
    fi

    local cmd
    local -a args
    args=("$@")
    while $read -p '> ' cmd ; do
        test -z "$cmd" && continue
        $cmd "${args[@]}"
    done
}

작동 방식은 다음과 같습니다.

$ pst 192.168.1.5
> nmap -Pn -sS
> ssh
> curl
> wget -r

이 문제는 잠시 미뤄두고 더 나은 해결책이 있는지 살펴보겠습니다. 이 솔루션의 한 가지 주요 단점은 실행되는 명령이 기록되지 않는다는 것입니다.

답변3

아직 비슷한 것을 구현하지 않았지만 쉘에서 제공하는 2가지 기능을 활용할 수 있는지 궁금합니다. $PATH 및 명령 완성.

"특수 모드"에 있을 때 탭 완성과 같은 기능을 제공할 수 있지만 반복적으로 클릭하는 대신 nm(nmap의 경우)을 실행하려는 실제 명령의 몇 글자를 입력한 다음 탭과 유사한 키 조합을 누르십시오. , 지금까지 입력한 내용과 일치하는 실행 파일을 찾기 위해 $PATH를 쿼리한 후 다음과 같은 목록을 반환합니다.

나는 다음을 입력합니다:

$ pst 192.168.1.5
> nm <press SHIFT-TAB>

나는 다음 목록을 받았습니다:

1* - nmap 192.168.1.5    2 - nmap2 192.168.1.5    3 - nmap3 192.168.1.5

노트:위 목록은 내 쿼리와 관련이 있습니다 $PATH.

위 목록에서 Enter를 눌러 첫 번째 응답(1*)을 수락하거나 사용하려는 일치하는 숫자를 입력할 수 있습니다.

>> 2 <press ENTER>

또한 이 도구를 bash 및 기타 셸에 통합하여 제공된 인수 유형을 허용하는 일치 항목만 일치 항목에서 고려되도록 complete일치 항목 범위를 좁힐 수도 있습니다.pst <arg>

관련 정보