adb shell非交互模式下如何设置别名

6

你好,我需要以adb shell <command>的形式运行一些操作。

当我在adb shell中测试所有内容时,它可以工作,因为我能够在.bashrc中设置一些别名。然而,当我执行adb shell <command>时,什么都不起作用,因为非交互模式下不使用.bashrc

我该如何解决这个问题?我能否将一些文件通过adb push推送到文件系统中,以便当运行adb shell时别名存在?


为什么不在生成命令的任何地方进行别名替换呢? - Chris Stratton
3个回答

16
如果您的Android设备已经root,您可以将 adb shell 的别名添加到 /system/etc/mkshrc 文件中。

1
如果你遇到“只读文件系统”错误,请启动TWRP或其他自定义恢复模式,挂载系统,然后编辑文件。 - Paul J
4
A遇到了只读错误,但是我尝试使用TWRP启动没有成功,因为/system文件夹不像正常启动时有etc/mkshrc文件。我使用了命令 mount -o remount,rw /system 在没有进入TWRP的情况下将/system挂载为可读写模式。 - Johannes Bittner
2
@JohannesBittner ... 为了补充你的精彩评论:为了再次将其重新挂载为只读(出于安全原因),请在终端中以root身份(su)使用以下命令:mount -o remount,ro /system - R Yoda
@R Yoda。现在从Android 9开始,使用“/”而不是“/system”。 mount -o,rw $(mount | grep /dev/root | awk '{print $3}' 对于任何Android版本都能完成工作。 - 5p0ng3b0b
挂载 -o rw,重新挂载 $(mount | grep /dev/root | awk '{print $3}')时出现括号未闭合等问题。 - 5p0ng3b0b
将别名添加到/system/etc/mkshrc只有在获取adb shell提示后才能生效。如果使用adb shell "<the-added-alias>"调用别名,则不会生效。(我有一个基于Android-10的已root设备)。 - Tzunghsing David Wong

0

一种方法是在单个ADB命令中发出多个shell命令。您可以将它们放在一个字符串中,并用分号分隔,如下所示:

adb shell“alias foo bar; export MY_VARIABLE = / path / to / somewhere; my_executable”

这里的“”非常重要,请确保它们正确配对。你可以用这种方式运行你的.bashrc

adb shell“source /path/to/.bashrc; my_executable”


-3
你可以编写一个Bash脚本来设置别名,然后执行你的shell:
#!/usr/bin/bash
. $HOME/.bashrc
adb shell $@

这段代码无法正常运行。Android上的shell不是bash,也不在/usr/bin目录下。 - John Dallman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接