Как я могу использовать! расширение в скрипте 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