apk中啟動一個shell指令碼
JAVA中,可以呼叫execCommand方法執行shell指令碼,以下是一個例子:
1. #! /system/bin/sh
2. #最簡單的一個shell,沒什麼功能
3. #需要注意的是必須是 #! /system/bin/sh開頭(有空格)
4. #和一般linux不同,如果用#!/bin/sh就會找不到(因為沒有)
5. ls
複製程式碼
在cmd中用adb push d:\\x.sh /data/ziyouku上傳shell
第一個引數是本地檔案位置,第二個是遠端位置(也就是放在android中的位置),在根目錄的data目錄下,ziyouku是我自己建立的一個資料夾. 如果失敗了,說是隻有隻讀許可權的話,需要修改資料夾的許可權.具體如下:
進入adb shell,使用mount命令檢視掛了哪些塊.
1. C:\Documents and Settings\Ziyoukutang>adb shell
2. # mount
3. mount
4. rootfs / rootfs ro 0 0
5. tmpfs /dev tmpfs rw,mode=755 0 0
6. devpts /dev/pts devpts rw,mode=600 0 0
7. proc /proc proc rw 0 0
8. sysfs /sys sysfs rw 0 0
9. tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0
10. /dev/block/mtdblock0 /system yaffs2 ro,noatime,nodiratime 0 0
11. /dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
12. /dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0
複製程式碼
比如/dev/block/mtdblock0 /system就是隻讀的,/dev/block/mtdblock1 /data是讀寫的
修改讀寫許可權用mount命令
例如 mount -t yaffs2 -o remount,rw,noatime,nodiratime /dev/mtdblock0 /system
-o選項用來描述裝置或者檔案的掛接方式,常用的有
loop:用來把一個檔案當成硬碟分割槽掛接上系統
ro:採用只讀方式掛接裝置
rw:採用讀寫方式掛接裝置
具體的用法可以google linux命令mout的用法.
上面那句話的意思就是讓/system資料夾有讀寫的許可權
2. cd到shell所在的資料夾,檢視x.sh的許可權,一般上傳上去的話是沒有執行許可權的,可以用ls -l檢視
使用chmod 777 x.sh增加許可權,具體可以google chmod的用法.
3. 執行 ./x.sh
4. 如何在程式中執行shell
1. package com.ziyouku.hellocommand;
2.
3. import java.io.BufferedReader;
4. import java.io.IOException;
5. import java.io.InputStream;
6. import java.io.InputStreamReader;
7. import android.app.Activity;
8. import android.os.Bundle;
9. import android.widget.TextView;
10.
11. public class HelloCommand extends Activity {
12. /** Called when the activity is first created. */
13. private TextView tv;
14.
15. @Override
16. public void onCreate(Bundle savedInstanceState) {
17. super.onCreate(savedInstanceState);
18. setContentView(R.layout.main);
19. tv = (TextView)findViewById(R.id.tv01);
20.
21.
22. try {
23. execCommand("./data/ziyouku/x.sh");
24. } catch (IOException e) {
25. // TODO Auto-generated catch block
26. e.printStackTrace();
27. }
28. }
29.
30. public void execCommand(String command) throws IOException {
31.
32. // start the ls command running
33. //String[] args = new String[]{"sh", "-c", command};
34. Runtime runtime = Runtime.getRuntime();
35. Process proc = runtime.exec(command); //這句話就是shell與高階語言間的呼叫
36. //如果有引數的話可以用另外一個被過載的exec方法
37.
38. //實際上這樣執行時啟動了一個子程序,它沒有父程序的控制檯
39. //也就看不到輸出,所以我們需要用輸出流來得到shell執行後的輸出
40. InputStream inputstream = proc.getInputStream();
41. InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
42. BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
43.
44. // read the ls output
45.
46. String line = "";
47. StringBuilder sb = new StringBuilder(line);
48. while ((line = bufferedreader.readLine()) != null) {
49. //System.out.println(line);
50. sb.append(line);
51. sb.append('\n');
52. }
53.
54. tv.setText(sb.toString());
55.
56. //使用exec執行不會等執行成功以後才返回,它會立即返回
57. //所以在某些情況下是很要命的(比如複製檔案的時候)
58. //使用wairFor()可以等待命令執行完成以後才返回
59. try {
60. if (proc.waitFor() != 0) {
61. System.err.println("exit value = " + proc.exitValue());
62. }
63. }
64. catch (InterruptedException e) {
65. System.err.println(e);
66. }
67. }
68. }
相關推薦
apk中啟動一個shell指令碼
JAVA中,可以呼叫execCommand方法執行shell指令碼,以下是一個例子: 1. #! /system/bin/sh 2. #最簡單的一個shell,沒什麼功能 3. #需要注意的是必須是 #! /system/bin/sh開頭(有空格) 4. #和一般linux不同,如果用#!/bin/sh就會
寫一個shell指令碼啟動伺服器
使用shell指令碼寫一個一鍵啟動伺服器 ####由於我們伺服器使用的docker, nginx和 redis 還有mysql都是docker啟動好的 我們專案使用supervisor程序管理工具,需要提前配置,但是不知道什麼原因,以前的環境配置出了問題,supervisor不
寫一個shell指令碼啟動伺服器 -----python
使用shell指令碼寫一個一鍵啟動伺服器 由於我們伺服器使用的docker, nginx和 redis 還有mysql都是docker啟動好的 我們專案使用supervisor程序管理工具,需要提前配置,但是不知道什麼原因,以前的環境配置出了問題,sup
在 Shell 指令碼中呼叫另一個 Shell 指令碼的三種方式
先來說一下主要以下有幾種方式: fork: 如果指令碼有執行許可權的話,path/to/foo.sh。如果沒有,sh path/to/foo.sh。 exec: exec path/to/foo.sh source: source path/to/foo.s
在 Shell 指令碼中呼叫另一個 Shell 指令碼的三種方式以及返回值問題
指令碼呼叫: 先來說一下主要以下有幾種方式: fork: 如果指令碼有執行許可權的話,path/to/foo.sh。如果沒有,sh path/to/foo.sh。新開啟子shell,需要在父shell定義環境變數的變數子shell才可以使用可以繼承環境變數。在指令碼中
在守護進程中啟動一個新進程
gis users man channel catch hat 進程 bject callback 以websocketpp的example為基礎, #include <websocketpp/config/asio_no_tls.hpp> #include
向大家分享一個shell指令碼的坑
打算在跳板機上寫一個shell指令碼,批量檢查遠端伺服器上的main程序是否在健康執行中。 先找出其中一臺遠端機器,檢視main程序執行情況 [[email protected] tmp]# ps -ef|grep main root 23448 23422 0 11:4
編寫第一個Shell指令碼【TLCL】
怎樣編寫一個 Shell 指令碼 編寫一個指令碼 使指令碼檔案可執行 把指令碼放到Shell能夠找到的地方 指令碼檔案格式 #!/bin/bash # This is our first script. echo 'Hello World!' #
編寫第一個shell指令碼檔案
vi test.sh 這樣就新建了一個名為test.sh的指令碼檔案,之後按i進入編輯模式,輸入以下內容: echo "What is your name?" read PERSON echo "Hello, $PERSON" 按esc鍵退出編輯模式,再輸
Linux "編寫一個shell指令碼,讓使用者輸入某個目錄名/使用者名稱,先判斷輸入名稱是否存在且是個目錄名稱"及其變式
(3)shell指令碼,提示使用者輸入一個使用者名稱,如果存在;顯示使用者UID和SHELL資訊;否則,則顯示無此使用者;顯示完成之後,提示使用者再次輸入;如果是quit則退出 https://www.cnblogs.com/wangyuebo/p/5836
迴圈刪除程式碼中^M的shell指令碼
#! /bin/bash #echo “start……” #define a function to read all the files in the folder function readfile(){ for file in ls $1 do if [
在自定義控制元件中啟動一個活動時出現的undefin的錯誤問題
public class TitleLayout extends LinearLayout{ public TitleLayout(Context context, AttributeSet attrs) { &nb
Linux 中高效編寫 Shell 指令碼的 10 個技巧
Shell 指令碼程式設計 是你在 Linux 下學習或練習程式設計的最簡單的方式。尤其對 系統管理員要處理著自動化任務,且要開發新的簡單的實用程式或工具等(這裡只是僅舉幾例)更是必備技能。 本文中,我們將分享 10 個寫出高效可靠的 bash 指令碼的實用技巧,它們包括: 1、 指令碼中多寫註釋
一個Shell指令碼裝逼的小技巧,讓指令碼屏顯酷炫起來
在我們腦海裡,Shell指令碼執行在Putty/Xshell裡也就是黑白的字元,但今天小編整理了一個可以快速讓你讓Sehll指令碼的列印屏顯酷炫起來,下面這條命令: echo -e “\033[44;37;5m So Cool! \033[0m” 執行後,打印出來的效果是這樣的,是不是覺得逼格滿滿?
Android動態部署六:如何從外掛apk中啟動BroadcastReceiver和ContentProvider
實現Android動態部署的過程中最重要的是從外掛apk中啟動四大元件,經過前面幾篇文章的分析,現在只剩下BroadcastReceiver和ContentProvider了,BroadcastReceiver是可以通過java程式碼動態註冊的,可想而知
ubuntu上第一個shell指令碼
Ubuntu下第一個shell指令碼 在home目錄下新建資料夾xk mkdir xk 進入xk資料夾,新建檔案helloshell touch helloshell 在helloshell檔案中輸入如下內容: #!/bin/bash
關於在hue當中調shell指令碼的操作(這裡的shell 指令碼是在shell腳本當中巢狀shell指令碼的操作使用source的方式)
這兩天在做資料的匯入操作,為了方便資料的匯入我們採用sqoop的方式將資料匯入。但是在表很多的情況下,在hue當中部署工作流就是一件很麻煩的事情, 然後想著能不能通過shell指令碼調shell指令碼的方式實現在一個shell腳本當中就可以實現對多個匯入操作指令碼的呼叫。 操作指令碼如下: #!/
mac下編寫自己的第一個shell指令碼
bash shell兩種工作模式 互動模式和指令碼模式 指令碼模式效率更高,可以實現自動化 1.helloworld.sh vi helloworld.sh #!/bin/bash echo "hello world 2018.11.1" #!bin/bash 是用
web專案中啟動一個執行緒,的方法
JavaWeb 服務啟動時,在後臺啟動載入一個執行緒。 目前,我所掌握的一共有兩種方法,第一種是監聽(Listener),第二種是配置隨專案啟動而啟動的Servlet。 下面對這兩種方法做一簡單的介紹,(Mark一下,防止以後急用又忘記了): 1.監聽(Listener) 首先,我們建立
python:一秒中啟動一個下載伺服器
一、背景 在實際工作中,時不時會有這樣的一個需求:將檔案傳給其他同事。將檔案傳給同事本身並不是一個很繁瑣的工作,現在的聊天工具一般都支援檔案傳輸。但是,如果需要傳送的檔案較多,那麼,操作起來就會比較麻煩。此外,如果檔案在遠端的伺服器上,你要將檔案傳給同事,則需要先將遠端伺服器的檔案下載到本地,然