我有一个 shell 脚本,它具有记录语句的功能
#!/bin/sh
Log() {
echo $1 >> /some/logfile
}
Log "Test logging works"
效果很好!
接下来,我有一个记录语句的程序,如果我想将那里的日志添加到一个文件中,我可以这样做
SomeProgram >> SomeFile.txt
这也很好用!
但是,如果我想在从同一 shell 脚本调用 SomeProgram
的同时将日志从 SomeProgram
传递到我的函数 Log
中怎么办?那可能吗?以下是我尝试过但没有奏效的一些技巧。
Log "SomeProgram >> SomeFile.txt"
Log(SomeProgram >> SomeFile.txt)
问题
那么,如何从程序中收集日志并将它们传递到函数的参数中呢?
环境:
Linux
最佳答案
如果是一次性的,我会写一个循环。
SomeProgram | while IFS= read -r line; do
Log "$line"
done
如果你打算经常这样做,你可以向 Log
添加第二种模式,它从标准输入而不是它的参数读取。
Log() {
case $1 in
--stdin)
while IFS= read -r line; do Log -- "$line"; done
return;;
--)
shift;;
esac
echo "$*" >> /some/logfile
done
SomeProgram | Log --stdin
不要check if stdin is a tty !这样做会导致 Log()
在任何时候以非交互方式调用脚本时使用 stdin。好的脚本在自动化和在管道中使用时表现良好;他们不坚持键盘输入。
关于bash - 如何收集程序的日志和输出并将它们传递给函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56834213/