Стойкие аргументы оболочки

Я часто нахожу, что выполняю ряд команд по одному набору аргументов.

Например:

  • Частая команда «шаблон»: удалить escape-символы расширения параметров
  • Есть ли недостаток в использовании «grep -E» вместо простого «grep»?
  • BASH: массив как строковый буфер
  • почему требуется много времени, чтобы запрос bash на высокую загрузку системы
  • обмен полями в столбцах по фиксированной схеме (да, нет, нет, да)
  • Что это означает от xev?
  • $ 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 . Решение должно работать с произвольным набором команд.

  • Как создать динамическое меню и сделать его пригодным для использования?
  • Как сделать непрерывный wc -l с текстовыми инструментами gnu?
  • Импорт априорной ОС zsh в Манджаро
  • Разместить файл доступа ht в webroot каждого скрипта bash каталога
  • Как скопировать папки с неприятными именами, используя функцию оболочки
  • Когда оболочка запускает встроенную систему, а сигнал генерируется клавиатурой, что будет обрабатывать сигнал?
  • 3 Solutions collect form web for “Стойкие аргументы оболочки”

    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-3 Alt-S будет вставлять 3 пробела, последний слово один раз и принять строку). Было бы более полезно, если бы он вставлял либо последнее слово из последней команды, либо последнее слово из 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-3 Alt-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 } 

    Я чувствую себя плохо, отвечая на мой собственный вопрос, как это, но у меня есть решение:

     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 

    Я немного оставлю вопрос открытым, чтобы узнать, появляются ли какие-либо превосходные решения. Одним из главных недостатков этого решения является то, что выполняемые им команды не регистрируются.

    Я не реализовал ничего подобного, но мне интересно, можете ли вы задействовать 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> 

    Вы могли бы также интегрировать complete объект в bash и другие оболочки, чтобы сузить совпадения, чтобы в матче учитывались только совпадения, которые могут принимать типы аргументов, предоставляемые pst <arg> .

    Linux и Unix - лучшая ОС в мире.