我正在尝试在我不是 root 的多个用户的 linux 服务器上运行 ADB(与我的 android 模拟器一起玩)。adb 守护进程将其日志写入文件/tmp/adb.log
,不幸的是,该文件似乎已硬编码到 ADB 中,并且这种情况不会改变。
因此, adb 无法运行,给出了明显的错误:cannot open '/tmp/adb.log': Permission denied
. 这个文件是由另一个用户创建的,并且/tmp
有粘性位。如果我启动 adb 并adb nodaemon server
使其写入 stdout,则不会发生错误(我还将其端口设置为唯一值以避免冲突)。
我的问题是:有什么方法可以让 ADB 写入另一个文件而不是/tmp/adb.log
? 更一般地说,有没有办法创建一种特定于进程的符号链接?我想将所有文件访问重定向/tmp/adb.log
到一个文件~/tmp/adb.log
。
再次,我不是根服务器上,因此chroot
,mount -o rbind
并chmod
不能有效的选项。如果可能,我不想修改 ADB 源,但如果没有其他解决方案,我肯定会这样做。
PS对于具体ADB情况下,我可以诉诸运行adb nodaemon server
与nohup
输出重定向,但总的问题仍然是相关的。
我想知道可以在 FreeBSD 中使用 Android studio 吗?我试图运行它,但我不能。我从端口安装了 IntelliJ,但没有选择 Android SDK 的选项。
例如,我想检查手机上是否存在目录。
R=$(adb shell 'ls /mnt/; echo $?' | tail -1);
$ echo $R
0
$ if [ "$R" -ne 0 ]; then echo "Path doesn't exist"; else echo "Path exists"; fi
: integer expression expected
Path exists
Run Code Online (Sandbox Code Playgroud)
R 有什么问题?好的,尝试使用另一个绝对为 0 的变量。
$ x=0
$ if [ "$x" -ne 0 ]; then echo "Path doesn't exist"; else echo "Path exists"; fi
Path exists
$ echo "|$x|"
|0|
$ echo "|$R|"
|0
Run Code Online (Sandbox Code Playgroud)
不打印第二个管道。0后面有字符吗?尝试修剪:
$ R=$(adb shell 'ls /mnt/; echo $?' | tail …
Run Code Online (Sandbox Code Playgroud) 我试图在下面执行以下 shell 脚本
function Check_Status () {
if [[ "$(adb shell getprop sys.boot_completed)" =~ "adb: no devices/emulators found" ]];
then
echo "here"
else
echo "im here"
fi;
};
Check_Status
Run Code Online (Sandbox Code Playgroud)
我得到以下输出,我期待看到“这里”而不是“我在这里”
不确定会丢失什么