我可以将脚本文件 (ScriptName.sh) 的输出重定向到 Android 中的 logcat,如下所示:
#!/system/bin/sh
echo "Comment 1"
log -p v -t "ScriptName.sh" "Comment 1"
echo "Comment 2"
log -p v -t "ScriptName.sh" "Comment 2"
echo "Comment 3"
log -p v -t "ScriptName.sh" "Comment 3"
然后我可以通过以下方式登录:
logcat | grep "ScriptName.sh"
如您所见,我必须为每个“echo”命令编写“log”命令。 有没有办法在脚本的开头(或任何地方)编写 log 命令,并让所有 echo 都转到 logcat 而无需重复“log”命令?
如果
log
可以直接读取 stdin,那么将 tee
输出到 log
和 /dev/tty 会更容易。看起来 log
没有提供这一点,但它很容易模仿:
#!/system/bin/sh
{
echo Comment 1
echo Comment 2
echo Comment 3
} | tee /dev/tty | while read line; do
log -p v -t "$0" "$line"
done
这个主题有很多变体。围绕
log
编写一个简单的包装器来为您执行此操作可能会更清晰,并且您可能希望使用适当的重定向和管道在脚本顶部附近执行包装器。例如(如果使用支持进程替换的 shell):
#!/bin/bash
exec > >(tee /dev/tty | log_wrapper ... )
或者,如果您没有可用的流程替代:
#!/bin/sh
trap 'rm -f $FIFO' 0
FIFO=$(mktemp)
< $FIFO tee /dev/tty | log_wrapper ... &
exec > $FIFO # Redirect all further output to the log wrapper
您不使用函数有什么原因吗?
function log() {
echo ${1}
log -p v -t "ScriptName.sh" ${1}
}