Я хочу создать псевдоним, который может быть определен на любой команде и 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
всегда f в функции. универсальному aliaslias нравится, не возможно.:(
НЕ ДУБЛИКАТ этого, потому что я использую ZSH и передачу параметров, возможен согласно подобным 10 другим ответам как это и это :).
Если я понимаю право, Вы хотите сделать что-то, что берет название команды, скажите dmesg
и превратите его во что-то, передает его вывод по каналу к lolcat
.
Это все еще лучше всего сделано с помощью функций:
dmesg () { command "[110]" "$@" | lolcat; }
Это так "универсально", как это прибывает. command
команда пропускает функции и вызовы builtins или исполняемые файлы: , Что является использованием команды: 'команда'? . [114]
, как Вы поняли, название функции, в этом являющемся названием команды также. Так command "[115]"
выполнения команда с тем же именем как функция.