wie übergebe ich die Ausgabe einer Echo-Anweisung als Argument an eine Funktion?

wie übergebe ich die Ausgabe einer Echo-Anweisung als Argument an eine Funktion?

Ich möchte ${1}im folgenden Beispiel einfach die Ausgabe der Echo-Anweisung als Argument() an die Logger-Funktion übergeben:

logfile=./testlog

`touch ${logfile}`

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

echo "started executing script" | logger

Antwort1

Nebenbei bemerkt: loggerist ein Standard-Unix-Dienstprogramm (POSIX). Um Verwirrung zu vermeiden, können Sie einen anderen Namen wählen.

Für einProgrammSie könnten verwenden | xargs -d '\n' logger. Dies würde den Fall einschließen, in dem Sie Ihre Funktion als Skriptdatei neu schreiben, ggf. mit der Zeile „shebang“. Es könnte jedoch schwierig sein, die richtige Umgebung für dieses Skript zu erhalten.

Bei einer Funktion besteht die einzige Möglichkeit, ein Argument zu übergeben, darin, ein Argument zu übergeben. Sie könnten eine zweite Funktion schreiben, die Ihre erste Funktion umschließt. Ich werde sie umbenennen logger1:

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

echo this is some log info | logger2

oder Sie könnten Ihrer Funktion readvon vornherein ihre Eingabe zuweisen. Sie könnten sogar eine Schleife codieren und sie mehrere Zeilen verarbeiten lassen, wenn dies vorgesehen ist, wie es die echten Protokollierungsfunktionen in den meisten Systemen tun.

Antwort2

Fügen Sie die Echo-Anweisung in die Funktion ein.

logfile=./testlog

`touch ${logfile}`

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

}

logger "started executing scirpt"

verwandte Informationen