Установка общего псевдонима ничего не делает
Я хочу создать псевдоним, который может быть определен для любой команды и 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"
запускает команду с тем же именем, что и функция.