IFS para ler systeminfos

0

Eu tentei ler algumas informações do sistema e colocá-las em variáveis:

df -k | grep /dev/mmcblk0p1 | IFS=" " read -r device blocks used available use_percent mounted_on

Não funcionou, todas as variáveis estão vazias.

    
por user294015 16.04.2018 / 13:39

2 respostas

2

O problema não é o IFS, é porque no bash (e em alguns outros shells) o RHS de um pipeline é executado em um subshell.

Uma alternativa simples é usar a substituição de processo para manter o read no shell pai:

read -r device blocks used available use_percent mounted_on < <(df -k | grep /dev/mmcblk0p1)

Veja Bash: a atribuição de variáveis não parece 'ficar'

    
por steeldriver 16.04.2018 / 14:00
0

Se você atribuir variáveis usando read , elas devem fazer parte da mesma instrução de bloco { ... } :

 df -k | grep /dev/mmcblk0p1 | { 
   read -r device blocks used available use_percent mounted_on
   printf "device=%s\nblocks=%s\nused=%s\navailable=%s\nuse_percent=%s\nmounted_on=%s\n" $device $blocks $used $available $use_percent $mounted_on
}
    
por oliv 16.04.2018 / 14:05