¿Cómo pasar la salida de la declaración de eco como argumento para funcionar?

¿Cómo pasar la salida de la declaración de eco como argumento para funcionar?

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: loggeres 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 readsu 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"

información relacionada