Solo quiero pasar el resultado de la declaración de eco como argumento ( ${1}
) a la función de registro en el siguiente ejemplo:
logfile=./testlog
`touch ${logfile}`
function logger(){
echo "[${USER}] [$nowTimestamp] [INFO] ${1}" >> ${logfile}
}
echo "started executing script" | logger
Respuesta1
Aparte: logger
es una utilidad estándar de Unix (POSIX). Puede elegir un nombre diferente para evitar confusiones.
Paraprogramapodrías usar | xargs -d '\n' logger
. Esto incluiría el caso en el que reescribas tu función como un archivo de script, con la línea 'shebang' si es necesario; sin embargo, conseguir el entorno correcto para ese script podría resultar complicado.
Para una función, la única forma de pasar un argumento es pasar un argumento. Podrías escribir una segunda función que envuelva tu primera función, a la que cambiaré el nombre logger1
:
logger1(){ echo "... $1" >>$file; }
logger2(){ read -r x; logger1 "$x"; }
echo this is some log info | logger2
o simplemente podría hacer que su función sea read
su entrada en primer lugar. Incluso podría codificar un bucle y hacer que maneje varias líneas si se proporcionan, como lo hacen las funciones de registro reales en la mayoría de los sistemas.
Respuesta2
coloque la declaración de eco dentro de la función.
logfile=./testlog
`touch ${logfile}`
function logger()
{
echo "$@"
echo "[${USER}] [$nowTimestamp] [INFO] ${1}" >> ${logfile}
}
logger "started executing scirpt"