установка универсального псевдонима приводит к выполнению ничего вообще

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

0
задан 15 March 2018 в 16:04

1 ответ

Если я понимаю право, Вы хотите сделать что-то, что берет название команды, скажите dmesg и превратите его во что-то, передает его вывод по каналу к lolcat.

Это все еще лучше всего сделано с помощью функций:

dmesg () { command "[110]" "$@" | lolcat; }

Это так "универсально", как это прибывает. command команда пропускает функции и вызовы builtins или исполняемые файлы: , Что является использованием команды: 'команда'? . [114], как Вы поняли, название функции, в этом являющемся названием команды также. Так command "[115]" выполнения команда с тем же именем как функция.

2
ответ дан 24 September 2019 в 11:26

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

Похожие вопросы: