Eu só quero passar a saída da instrução echo como argument( ${1}
) para a função logger no exemplo a seguir:
logfile=./testlog
`touch ${logfile}`
function logger(){
echo "[${USER}] [$nowTimestamp] [INFO] ${1}" >> ${logfile}
}
echo "started executing script" | logger
Responder1
Além: logger
é um utilitário padrão Unix (POSIX). Você pode escolher um nome diferente para evitar confusão.
Paraprogramavocê poderia usar | xargs -d '\n' logger
. Isso incluiria o caso em que você reescreve sua função como um arquivo de script, com a linha 'shebang', se necessário; no entanto, pode ser difícil obter todo o ambiente correto para esse script.
Para uma função, a única maneira de passar um argumento é passando um argumento. Você poderia escrever uma segunda função que envolva sua primeira função, que renomearei logger1
:
logger1(){ echo "... $1" >>$file; }
logger2(){ read -r x; logger1 "$x"; }
echo this is some log info | logger2
ou você pode simplesmente ter sua função read
como entrada em primeiro lugar. Você pode até codificar um loop e fazer com que ele lide com várias linhas, se fornecido, como fazem os recursos reais de registro na maioria dos sistemas.
Responder2
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"