Могу ли я использовать псевдоним `!` в bashrc?

Могу ли я использовать псевдоним `!` в bashrc?

Я использую emacs в качестве редактора в командной строке (псевдоним alias em='emacs -nw') и хотел бы иметь возможность создать псевдоним для !emоткрытия файла, который был открыт в emacs последним.

Я пробовал alias e='!em', alias e='${!}em', alias e='${!em}', но пока не могу найти ничего подходящего.

Я нашел несколько связанных постов о псевдонимах !!:

псевдоним для команды, использующий !! для вызова последней команды

решение1

Я не думаю, что расширение истории выполняется после расширения псевдонимов, поэтому вам нужно будет использовать, history -pчтобы сделать это явно:

alias e='eval "$(history -p !em)"'

Хотя это тоже не работает в этом случае, так как псевдонимы не раскрываются после подстановки команд. Но функции работают, так что эти два должны это сделать:

em() { emacs -nw "$@"; }
e() { eval "$(history -p !em)"; }

Последнее может быть псевдонимом.

решение2

Если вы создаете псевдоним em, как описано, то вам не следует пытаться создать дополнительный псевдоним для !em. ! вызывает механизм истории оболочки, поэтому команда "!em" повторит самое последнее использование вашего псевдонима (хотя это может быть не последний файл, фактически отредактированный emacs).

Связанный контент