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: logger
ist 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 read
von 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"