如何运行adb shell命令并保留在shell中?

17

有人知道如何在adb shell中运行命令并保持在shell会话中吗?我想要做的是在adb shell中设置别名。

我尝试了以下操作但没有成功

adb shell <<< "ls"

执行此命令后,确实仍停留在shell中,但无法接收任何进一步命令的输出。

我还尝试了以下操作:

adb shell <<EOF
ls
EOF

获得相同的结果。

4个回答

30

当你运行以下代码:

adb shell ls

您目前正在 ADB 外运行此命令。

首先,您需要进入 ADB:

adb shell

一旦进入ADB shell,您就可以继续查看输出并输入更多命令。

ls
help

要退出ADB,只需键入“exit”或按“Ctrl + C”


8

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客户机。


太棒了!我是一个相当新的adb用户,这拯救了我的理智! - Ted Lyngmo
1
@TedLyngmo 不用担心,Android 迟早会找到一种消耗你理智的方式! :-) - Ciro Santilli OurBigBook.com

5

评论区这里有类似的问题。

简而言之,从终端运行以下命令:

stty raw -echo ; ( echo "ls" && cat ) | adb shell ; stty sane

注意:如果没有stty魔法,命令将被传送到adb,并且无法识别制表符完成等功能。


0
            //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)

            });
            }

“仅有代码的答案并不是高质量的答案”。虽然这段代码可能很有用,但您可以通过解释它为什么有效、如何有效、何时应该使用以及其限制是什么来改进它。请编辑您的答案,包括解释和相关文档链接。 - Muhammad Mohsin Khan

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