Я просто хочу передать вывод оператора echo в качестве аргумента ( ${1}
) функции логгера в следующем примере:
logfile=./testlog
`touch ${logfile}`
function logger(){
echo "[${USER}] [$nowTimestamp] [INFO] ${1}" >> ${logfile}
}
echo "started executing script" | logger
решение1
Aside: logger
это стандартная утилита Unix (POSIX). Вы можете выбрать другое имя, чтобы избежать путаницы.
Дляпрограммавы могли бы использовать | xargs -d '\n' logger
. Это включает случай, когда вы переписываете свою функцию как файл скрипта, со строкой 'shebang', если необходимо; однако получение всей правильной среды для этого скрипта может быть сложным.
Для функции единственный способ передать аргумент — это передать аргумент. Вы можете написать вторую функцию, которая оборачивает вашу первую функцию, которую я переименую logger1
:
logger1(){ echo "... $1" >>$file; }
logger2(){ read -r x; logger1 "$x"; }
echo this is some log info | logger2
или вы могли бы просто сделать свою функцию read
ее входом в первую очередь. Вы могли бы даже закодировать цикл и заставить его обрабатывать несколько строк, если это предусмотрено, как это делают реальные средства ведения журналов в большинстве систем.
решение2
поместите оператор echo внутрь функции.
logfile=./testlog
`touch ${logfile}`
function logger()
{
echo "$@"
echo "[${USER}] [$nowTimestamp] [INFO] ${1}" >> ${logfile}
}
logger "started executing scirpt"