Персистентные аргументы оболочки

Необходимо выйти из круглых скобок:

cd Program\ Files\ \(x86\)

Нажатие TAB будет обычно завершать командную строку для Вас и даст подсказки, как заключить файл/имена каталогов в кавычки.

3
14.08.2013, 01:42
3 ответа

Alt-_ уже вставляет последнее слово от последней команды. Для меня это достаточно хорошо, но Вы могли добавить другую привязку клавиш, которая вставляет пробел, то последнее слово, и признайте, что строка (Входит).

С tcsh или zsh (для Высоких звуков, 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-3Alt-S вставил бы 3 пробела, последнее слово однажды и принял бы строку). Было бы более полезно иметь его, вставляют или энное последнее слово от последней команды, или последнее слово от энной последней команды или последние 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
}
4
27.01.2020, 21:10
  • 1
    Спасибо. Хотя это не работает с несколькими аргументами, это работает на большинство моих вариантов использования. –   26.05.2013, 19:35
  • 2
    @EvanTeitelman, посмотрите мое редактирование для нескольких аргументов. –  Stéphane Chazelas 26.05.2013, 20:36

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

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

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

4
27.01.2020, 21:10
  • 1
    Как Ваш ответ. Я, должно быть, пропустил некоторую часть в вопросе. –  unxnut 26.05.2013, 17:06

Я не реализовал ничего как это, но интересно, могли ли Вы насладиться этими 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.

Из списка выше я мог или совершить нападки, входят, чтобы принять первый ответ (1*) или ввести количество соответствия, которое я хочу использовать:

>> 2 <press ENTER>

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

1
27.01.2020, 21:10

Теги

Похожие вопросы