como passar a saída da instrução echo como argumento para funcionar?

0

Eu só quero passar a saída da instrução echo como argumento ( ${1} ) para a função logger no seguinte exemplo:

logfile=./testlog

'touch ${logfile}'

function logger(){
  echo "[${USER}] [$nowTimestamp] [INFO] ${1}" >> ${logfile}
}

echo "started executing script" | logger
    
por user197279 27.10.2016 / 07:44

2 respostas

0

coloque a instrução echo dentro da função.

logfile=./testlog

'touch ${logfile}'

function logger()
{
echo "$@"
echo "[${USER}] [$nowTimestamp] [INFO] ${1}" >> ${logfile}

}

logger "started executing scirpt"
    
por 27.10.2016 / 08:13
0

Demais: logger é um utilitário Unix (POSIX) padrão. Você pode escolher um nome diferente para evitar confusão.

Para um programa você pode usar | xargs -d '\n' logger . Isso inclui o caso em que você reescreve sua função como um arquivo de script, com a linha 'shebang', se necessário; no entanto, obter todo o ambiente correto para esse script pode ser difícil.

Para uma função, a única maneira de passar um argumento é passar um argumento. Você poderia escrever uma segunda função que envolve sua primeira função, a qual eu renomeio logger1 :

logger1(){ echo "... $1" >>$file; }
logger2(){ read -r x; logger1 "$x"; }

echo this is some log info | logger2

ou você poderia ter sua função read sua entrada em primeiro lugar. Você pode até mesmo codificar um loop e fazer com que ele manipule várias linhas, se fornecidas, como os recursos de registro reais na maioria dos sistemas.

    
por 27.10.2016 / 15:32