как передать вывод оператора echo в качестве аргумента функции?

как передать вывод оператора echo в качестве аргумента функции?

Я просто хочу передать вывод оператора 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"

Связанный контент