问题描述
在尝试将 time
命令的输出重定向到文件时遇到了问题。具体来说,在使用 adb shell su
来提升权限时,命令执行失败。而在不使用 su
的情况下,同样的命令可以成功执行。
解决方案
方案1
注意:此方案适用于大多数情况,但在某些环境中可能无法正常工作,请先备份重要数据。
使用 sh -c
来执行命令
由于 adb shell
和 su
在处理参数和 I/O 流方面存在不一致的行为,推荐使用 sh -c
来执行命令,以确保命令被正确解析。以下是具体步骤:
- 创建命令字符串:将
time
命令及其输出重定向的部分放入一个字符串中。 - 使用
adb shell
和su -c
执行命令:使用adb shell
连接到设备,并使用su -c
来执行包含time
命令的字符串。
adb shell 'su -c "time -p echo hello world > /data/local/tmp/file"'
示例说明
上述命令中,su -c
用于执行括号内的命令字符串。time -p echo hello world
会输出 hello world
并记录时间,结果会被重定向到 /data/local/tmp/file
文件中。
方案2
请谨慎使用,此方案可能在某些特定环境下不可行。
使用 sh -c
直接执行命令
如果 su -c
仍然无法解决问题,可以尝试直接使用 sh -c
来执行命令,如下所示:
adb shell 'sh -c "time -p echo hello world > /data/local/tmp/file"'
示例说明
此方法与方案1类似,但是直接使用 sh -c
来执行命令字符串。这种方式确保了命令的正确解析和执行。
方案3
请谨慎使用,此方案可能在某些特定环境下不可行。
使用分步执行命令
如果上述方法仍然无效,可以考虑分步执行命令,先使用 adb shell
连接到设备,然后在交互模式下手动执行命令。
- 连接到设备:使用
adb shell
连接到设备。 - 切换到 root 用户:执行
su
命令切换到 root 用户。 - 执行
time
命令:在 root 用户下执行time
命令并重定向输出。
adb shell
su
time -p echo hello world > /data/local/tmp/file
示例说明
这种方法避免了 adb shell
和 su
在参数处理上的问题,但需要手动操作。
总结
以上三种方法均适用于解决 time
命令输出重定向的问题。建议优先尝试方案1,如果不行再尝试方案2和方案3。在实际操作过程中,请确保设备和环境配置正确,并做好数据备份。
正文完