Eu tento fazer um join
de duas fontes - de um pipe e um arquivo. Eu escrevi este simples one-liner:
FILENAME=$TMPDIR".netstat"; \
join -t , $FILENAME <(nettop -t wifi -P -x -L1 | cut -d , -f 2,5,6 | tail -n +2) | \
awk '{print $0}'
Normalmente é executado a partir do shell, mas não é executado a partir de um script.sh (script completo, veja abaixo):
./script.sh: line 16: syntax error near unexpected token '('
Eu tentei usar diferentes citações dentro da minha expressão para mascarar variáveis, parâmetros ou comandos completamente, mas não consegui executar o script.
Alguém pode ajudar?
S. Este script está sendo invocado pelo GeekTool (widget Shell) no macOS Sierra 10.12.3.
P.P.S. Sim, sei que o OS X não é "Unix e Linux", mas achei que a diferença não é tão grande.
Script completo com alguns comentários é:
#!/bin/sh
FILENAME=$TMPDIR".netstat"
# checking if existing stats file
if [ ! -f $FILENAME ]; then
nettop -t wifi -P -x -L 1 | cut -d , -f 2,5,6 | tail -n +2 > $FILENAME # save stats to file
exit
fi
fts='stat -r $FILENAME | cut -d " " -f 10' # get timestamp of stats file
now='date +%s' # get current datetime
join -t, $FILENAME <(nettop -t wifi -P -x -L1 | cut -d , -f 2,5,6 | tail -n +2) | awk '{print $0}'
ATUALIZADO RESOLVIDO
Shebang mudou para #!/bin/bash