有没有办法在将命令输出到另一个方法之前修改命令的输出?
例如:
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}"
答案 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!
希望这会有所帮助。如果你真的需要重定向('>')让我知道,我会深入挖掘。