definir um alias genérico resulta em não fazer nada

0

Eu quero criar um alias, que pode ser definido em qualquer comando e concats | lolcat para ele. Até agora eu me pesquisei

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

mas quando eu testo com dmesg não obtenho resultado.

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

No meu entendimento, o alias define uma função f, que é chamada posteriormente. Para evitar a recursão, a última declaração é para cancelar a função.

EDITAR: Eu parei em:

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

qual não é o truque, porque eu não posso passar o argumento $0 para minha função. O $0 é sempre f dentro da função. um aliaslias genéricos como NÃO é possível. : (

NÃO É UM DUPLICADO de isto , porque eu estou usando ZSH e a passagem de argumentos é possível de acordo gostar de 10 outras respostas como esta e isso :).

    
por KuSpa 15.03.2018 / 12:50

1 resposta

2

Se bem entendi, você quer fazer algo que usa um nome de comando, digamos dmesg , e transformá-lo em algo que canaliza sua saída para lolcat .

Isso ainda é melhor feito usando funções:

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

Isso é tão "genérico" quanto é possível. O comando command ignora funções e chama builtins ou executáveis: Qual é o uso do comando: 'command'? . $0 , como você percebeu, é o nome da função, sendo este o nome do comando também. Portanto, command "$0" executa o comando com o mesmo nome da função.

    
por muru 15.03.2018 / 14:11