在将一个方法的输出发送到另一个方法之前,先传递并修改它

时间:2015-08-18 08:04:15

标签: linux bash

有没有办法在将命令输出到另一个方法之前修改命令的输出?

例如:

print_log_message()
{
  echo "A descriptive log message"
}

print_error_message()
{
  echo "A descriptive error message"
}

log()
{
  logger -s $1
}

我希望以以下格式记录消息: "日志消息:描述性日志消息"

然而前缀"日志消息:"可能会改变。

print_log_message > log "Log message: ${log_output}"

print_error_message > log "Error message: ${error_output}"

1 个答案:

答案 0 :(得分:3)

不确定这会真正回答你的问题,但最近我遇到了类似的问题。我不知道'>'重定向,但我可以提供两种可能性。

首先使用管道('|'):

log(){
  while read msg
  do
    echo "$1: $msg"
  done
}

echo "all is fine" | log "Log message"
# Log message: all is fine
echo "drama!" | log "Error message"
# Error message: drama!

但我不确定你为什么需要使用stdin,也许这对你来说是强制性的?如果不是,我认为使用仅使用函数的解决方案会更好:

log(){
  echo "${2:-Log message}: ${1:-}"
}

log "all is fine"
# Log message: all is fine
log "drama!" "Error message"
# Error message: drama!

当然,你可以通过其他功能使其更具表现力:

error(){
  log "${1:-}" "Error message"
}

log "all is fine"
# Log message: all is fine
error "drama!"
# Error message: drama!

希望这会有所帮助。如果你真的需要重定向('>')让我知道,我会深入挖掘。