Установка общего псевдонима ничего не делает

Я хочу создать псевдоним, который может быть определен для любой команды и concats | lolcat к этому. До сих пор я погуглил себя

alias MyCommandName='f(){"$@" | lolcat; unset -f f};f'

но когда я проверяю это с dmesg Я не получаю результата.

# set dmesg
alias dmesg='f(){"$@" | lolcat; unset -f f};f'
#desired command: dmesg | lolcat
dmesg

В моем понимании псевдоним определяет функцию f, которая вызывается впоследствии. Чтобы предотвратить рекурсию, последний оператор должен сбросить функцию.

РЕДАКТИРОВАТЬ: Я остановился на:

    alias MyCommandName='f(){eval "$@ | lolcat"; unset -f f};f' 
    alias MyCommandName='f(){eval "$0 $@ | lolcat"; unset -f f};f'

что не трюк, потому что я не могу пройти $0 аргумент в мою функцию. $0 всегда находится внутри функции. общие псевдонимы как это невозможно.:(

Я не дублирую это, потому что я использую ZSH, и передача аргументов возможна в соответствии с 10 другими ответами, подобными этому и этому:).

1 ответ

Решение

Если я правильно понимаю, вы хотите сделать что-то, что принимает имя команды, скажем, dmesgи превратить это во что-то lolcat,

Это все еще лучше всего сделать, используя функции:

dmesg () { command "$0" "$@" | lolcat; }

Это так же "универсально", как и раньше. command команда пропускает функции и вызывает встроенные или исполняемые файлы: что такое команда: `команда`?, $0как вы поняли, это имя функции, в том числе и имя команды. Так command "$0" запускает команду с тем же именем, что и функция.

Другие вопросы по тегам