android - 如何以简单的方式将 shell 脚本输出重定向到 Logcat

标签 android linux shell logging logcat

我可以将脚本文件 (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”命令。 有什么方法可以在脚本的开头(或任何地方)编写日志命令,让所有回显都转到 logcat 而无需重复“日志”命令?

最佳答案

如果 log 可以直接读取 stdin,那么将输出 teelog 和/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

关于android - 如何以简单的方式将 shell 脚本输出重定向到 Logcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47377770/

相关文章:

android - Social.localUser.Authenticate 回调从未调用过

linux - 使用 pwm-ir-tx 模块时没有可用的用户空间 chardev

linux - 我想通过 shell 删除所有文件,除了少数 as 但导致语法错误 : "(" unexpected

c - 从文件的最后一行读取到 C 中的第一行

java - XMLPullParser 结束标记错误

java - Android:如何获取此处指定格式的时区字符串

c - free() 是否删除存储在动态分配内存中的数据?

r - 无法加载共享对象 quantreg.so

linux - 从 shell 脚本调用脚本 - 找不到获取命令

android - IOException : read failed, 套接字可能已关闭 - Android 4.3 上的蓝牙