Как я могу использовать! расширение в скрипте ZSH?

Я хотел бы написать функцию, которая облегчает использование параметров предыдущей команды, таких как !:1, Я читал, что в Bash это можно сделать с помощью:

set -o history 
set -o histexpand

Итак, как я мог написать функцию Zsh, которая будет иметь доступ к !:1?

1 ответ

Во-первых, вы не можете использовать ! в скриптах ZSH.

Но есть и другие способы доступа к вашей истории командной строки:

$ echo foobar
foobar
$ fc -l -1
501  echo foobar

Конечно, это не работает изнутри скрипта, так как он все еще пытается получить доступ к истории, которой просто не существует для неинтерактивного zsh. Но вы можете включить его в функцию в вашем .zshrc и передать его в сценарий оттуда:

function histaccess ()
{
    lastcmd=$(fc -l -1)
    somescript ${(z)${lastcmd#*  }}
}

призвание histaccess извлечет последнюю командную строку (fc -l -1), раздеть номер истории (${lastcmd#* }), разделите это как Zsh (${(z)...}) и передать его somescript, В somescript Вы можете сделать что-нибудь еще. Если вы хотите использовать ZSH для сценариев, обратите внимание, что массивы начинаются с 1 если вариант KSH_ARRAYS в то время как расширение истории начинается с 0, с !:0 будучи именем команды.

Если вы хотите избежать заполнения своей истории вызовами histaccess, вы можете связать его с ключом (например, Alt+I) в вашем .zshrc:

zle -N histaccess
bindkey '^[i' histaccess
Другие вопросы по тегам