나는 종종 일련의 매개변수에 대해 일련의 명령을 실행하는 자신을 발견합니다.
예를 들어:
$ 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>