Android 9修改/system/build.prop遇权限问题及sed命令异常求助
问题解决方案
一、解决echo追加build.prop权限拒绝问题
问题原因
当在本地终端执行:
adb shell su 0 "echo net.hostname=XXXXXX >> /system/build.prop"
本地shell会优先解析重定向符号>>,试图在本地电脑创建/system/build.prop文件,而非将该重定向操作传递到设备的root shell中,因此触发权限拒绝错误。而分步执行时,所有命令都在设备的root shell环境中运行,>>由设备shell解析,因此可以正常写入。
解决方案
通过以下方式避免本地shell解析重定向符号:
- 使用单引号包裹整个命令串,让本地shell不解析内部的特殊符号:
adb shell su 0 'echo net.hostname=XXXXXX >> /system/build.prop' - 转义重定向符号
>>:adb shell su 0 "echo net.hostname=XXXXXX \>> /system/build.prop" - 通过
sh -c在设备端执行完整命令:adb shell su 0 sh -c "echo net.hostname=XXXXXX >> /system/build.prop"
注意:执行前确保已通过
adb shell su 0 "mount -o rw,remount /"成功将系统分区挂载为可读写状态(挂载后可通过adb shell mount | grep /dev/root确认挂载状态是否为rw)。
二、解决sed命令追加内容异常问题
问题原因
执行:
adb shell su 0 "sed -i '$aNew line of data' /system/build.prop"
时,本地shell会解析双引号内的$a(将其视为本地环境变量),若a未定义则会被替换为空字符串,最终传递到设备的sed命令变为:
sed -i 'New line of data' /system/build.prop
这会导致sed错误地将New识别为命令,最终出现每一行下方添加ne of data的异常。
解决方案
通过以下方式避免本地shell解析$符号:
- 使用单引号包裹sed的脚本部分:
adb shell su 0 'sed -i "$aNew line of data" /system/build.prop' - 转义
$符号:adb shell su 0 "sed -i '\$aNew line of data' /system/build.prop"
这样$a会被完整传递到设备的sed中,$代表最后一行,a为sed的追加命令,即可在文件末尾正常添加指定内容。
内容的提问来源于stack exchange,提问作者tirenweb
相关产品推荐
相关产品推荐

