刚进入Android终端即可使用busybox的命令

http://blog.csdn.net/dengxiayehu/article/details/6991894


Android中的内置sh可是出了名的难用,只支持少得可怜的常用命令,所以大家一般都喜欢推一个busybox进去
以方便使用。具体方法请参见:在Android模拟器中安装busybox这篇文章
但是这里又出现一个问题就是,就是我们每次adb shell进入Android的终端后,还得要手动先执行一下那个脚本,
那还不得麻烦死,所以还得改进。我想,应该可以从sh的源码入手,在其进入命令循环之前先在代码中设置我们所需的
alias命令即可,具体如下:
所需改动的文件:
1、system/core/sh/main.c
找到void cmdloop(int top)这个函数的定义,在for(;;)死循环之前加上
setprealias();
这句调用自定义的设置alias函数,具体的函数体下述。

2、system/core/sh/alias.c
在其中添入两个函数即可,具体如下:

  1. STATIC int handle_line(char *line);  
  2. STATIC void setprealias(void);  
  3.   
  4. STATIC  
  5. int  
  6. handle_line(char *line)  
  7. {  
  8.     char *p, *q;  
  9.     char target[30];  
  10.   
  11.     if (!line) {  
  12.         return 0;  
  13.     }  
  14.   
  15.     p = line;  
  16.     for ( ; ; ) {  
  17.         while (isspace(*p)) {  
  18.             ++p;  
  19.         }  
  20.         if (!(*p)) {  
  21.             return 0;  
  22.         }  
  23.         q = p;  
  24.         while (isalpha(*p) || isdigit(*p) \  
  25.                 || '[' == *p \  
  26.                 || ']' == *p \  
  27.                 || '.' == *p \  
  28.                 || '-' == *p \  
  29.                 || '_' == *p) {  
  30.             p++;  
  31.         }  
  32.         *p++ = '\0';  
  33.         // > ignore alias itself  
  34.         if (!strcmp(q, "alias")) {  
  35.             continue;  
  36.         }  
  37.         snprintf(target, sizeof(target), "busybox %s", q);  
  38.         setalias(q, target);  
  39.     }  
  40.     return 0;  
  41. }  
  42.   
  43. STATIC  
  44. void  
  45. setprealias(void)  
  46. {  
  47.     FILE *fp;  
  48.     char buff[128];  
  49.     int flag = 0;  
  50.   
  51.     fp = popen("busybox --help""r");  
  52.     if (!fp) {  
  53.         outfmt(out2, "run \"busybox --help\" failed");  
  54.         return;  
  55.     }  
  56.     while (fgets(buff, sizeof(buff), fp)) {  
  57.         if (flag) {  
  58.             handle_line(buff);  
  59.         }  
  60.         if (!strcmp("Currently defined functions:\n", buff)) {  
  61.             flag = 1;  
  62.         }  
  63.     }  
  64.     pclose(fp);  
  65. }  

函数很简单,就不详细注释了,看下效果:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值