私はしばしば一連のパラメータに対して一連のコマンドを実行する自分自身を見つけます。
たとえば、
$ 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最後のコマンドの最後の3番目の単語が挿入されます。
最後から3番目のコマンドに最後の単語を挿入するには、次のようにします。
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
この問題はしばらく遅れていて、より良い解決策があるかどうかを見てみましょう。この解決策の1つの主な欠点は、実行される命令が記録されないことである。
答え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>