Entenda a ordem dos comandos no bash quando as funções estão envolvidas

0

Eu tenho um exemplo onde eu defino uma função chamada f que imprime blah e, em seguida, armazena o próprio comando e todos os seus argumentos na variável $@ :

# f () { echo blah; "$@"; }
# df -h | f
blah
# df -h | f cat
blah
Filesystem                                              Size  Used Avail Use% Mounted on
rootfs                                                   37G   36G     0 100% /
udev                                                     10M     0   10M   0% /dev
tmpfs                                                   304M  308K  303M   1% /run
/dev/disk/by-uuid/466fbdef-029c-4625-8bb2-cde3acd77e55   37G   36G     0 100% /
tmpfs                                                   5.0M     0  5.0M   0% /run/lock
tmpfs                                                   2.1G     0  2.1G   0% /run/shm
/dev/sda2                                                74G  7.0G   63G  11% /home
/dev/sr1                                                5.6M  5.6M     0 100% /media
# 

Como essa parte f cat à direita do pipe funciona? Como o stdout de df -h acaba na variável $@ ? Por que cat imprime o conteúdo da variável $@ ?

    
por Martin 22.06.2015 / 03:32

1 resposta

3

Em:

df -h | f

Você redirecionou df -h output para f standard in e depois chamou f sem nenhum argumento, $@ está vazio.

Por outro lado:

df -h | f cat

Você redirecionou df -h output para f standard, em seguida, chamou f com um argumento cat . "$@" dentro de f expandido para cat . cat padrão concatenado em, que é df -h output, para saída padrão.

    
por 22.06.2015 / 03:41

Tags