有人知道如何在adb shell中运行命令并保持在shell会话中吗?我想要做的是在adb shell中设置别名。
我尝试了以下操作但没有成功
adb shell <<< "ls"
执行此命令后,确实仍停留在shell中,但无法接收任何进一步命令的输出。
我还尝试了以下操作:
adb shell <<EOF
ls
EOF
获得相同的结果。
当你运行以下代码:
adb shell ls
您目前正在 ADB 外运行此命令。
首先,您需要进入 ADB:
adb shell
一旦进入ADB shell,您就可以继续查看输出并输入更多命令。
ls
help
要退出ADB,只需键入“exit”或按“Ctrl + C”
expect
解决方案
这将运行命令,并自动进入ADB shell。
adb-cmd
#!/usr/bin/env expect
spawn adb shell
expect "#"
send [ concat [ join $argv " " ] ]
send "\r"
interact
使用方法:
adb-cmd 'cd /data/data; ls'
在Ubuntu 16.04主机上测试,Android O客户机。
评论区这里有类似的问题。
简而言之,从终端运行以下命令:
stty raw -echo ; ( echo "ls" && cat ) | adb shell ; stty sane
注意:如果没有stty
魔法,命令将被传送到adb
,并且无法识别制表符完成等功能。
//you can use a nodejs script as below:
//let input='shell script here'
let input='cd /data/local/tmp\nchmod +x a.out\n./a.out\n'
p=run("adb.exe",args:'shell',cb:rs=>lg(rs)})
p.stdout.on("data",rs=>{
lg(rs)
setInterval(_=>process.exit(),2000);
})
p.stdin.write(input)
//+++++++++++++++++++++++++
function lg(...args){
console.log(...args);
}
function run(cmd,args,cb){
if(args) cmd= cmd+" "+args;
return require('child_process').exec(cmd,(er,stdout,stderr)=>{
if(er) return cb(stdout||stderr,false);
stdout=stdout==''?true:stdout;
cb(stdout,true)
});
}
adb
用户,这拯救了我的理智! - Ted Lyngmo