2012-01-06 71 views
21

Tôi đã tạo tập lệnh để gắn phân vùng và thực hiện một số nội dung trong hệ thống Android của mình. Tôi đã lưu tập lệnh dưới dạng install.sh trong thư mục/bin của Android.Khởi chạy tập lệnh dưới dạng root thông qua ADB

Tôi muốn gọi tập lệnh từ ADB, bản thân nó được gọi từ một tệp lô trên Windows, nhưng nó cần phải được thực thi dưới dạng gốc.

Các giải pháp đầu tiên tôi đã cố gắng là để gọi các kịch bản sử dụng

adb shell "su -c sh /bin/script.sh" 

nhưng nó không hoạt động vì nó mang lại cho tôi một truy cập shell (với quyền root), nhưng không được thực thi. Tôi cũng đã cố gắng gọi

adb root "sh /bin/script.sh" 

nhưng tôi đã nhận lỗi sau

adbd cannot run as root in production builds 

sau đó tôi đã cố gắng để viết

su -c "command" 

cho tất cả các lệnh mà cần một quyền root trong kịch bản của tôi , nhưng tôi có cùng một vấn đề. Khi tôi chạy tập lệnh, tôi chỉ lấy được trình bao gốc và không có gì được thực hiện.

Nếu tôi sử dụng giải pháp đầu tiên bằng tay (ví dụ: tôi gọi adb shell su, rồi tập lệnh của tôi), nó hoạt động. Tuy nhiên, toàn bộ vấn đề là tự động hóa quy trình, để trình bao adb có thể được gọi từ một tập lệnh khác.

Bạn có ý tưởng nào về cách tôi có thể đạt được điều này không?

Cảm ơn!

Trả lời

50

này làm việc cho tôi:

Tạo myscript.bat và đưa vào nó (chú ý dấu nháy đơn xung quanh các lệnh được thực hiện trong chế độ superuser):

adb shell "su -c 'command1; command2; command3'" 

sau đó chạy myscript .bat từ một hệ vỏ DOS.

Lưu ý: có vẻ như ký tự tiếp tục dòng DOS (^) hoạt động trong tình huống này. Nói cách khác, sau đây không làm việc cho tôi:

adb shell "su -c '^ 
command1;^
command2;^
command3'" 

Điều này dẫn đến "Lỗi cú pháp: chưa hoàn tất được trích dẫn chuỗi"

+0

Điều này hoạt động đáng kinh ngạc trên phiên bản Samsung Note 4 Exynos của tôi, phiên bản hệ thống Android 4.4. Tôi đã tìm kiếm trực tuyến các giải pháp cho cả ngày. Cảm ơn trời, cuối cùng tôi đã đọc bài đăng này. Nó hoạt động. RootAdb sử dụng để làm việc trên máy tính bảng Galaxy Note 10.1, nhưng nó không hoạt động cho Note4 này nữa. –

+0

trên Android 7.1.1 Tôi thấy rằng việc sử dụng dấu nháy đơn trong dấu ngoặc kép thực sự làm sai lệch quá trình thực hiện. Loại bỏ chúng dường như làm mọi thứ hoạt động như mong đợi. – MikeSchem

0

but it does not work as it gives me a shell access (with root permissions), but nothing is executed.

Làm cách nào để bạn biết rằng bạn được cấp quyền root? Tôi giả sử bạn đang cố gắng thực thi kịch bản trên một thiết bị? Thiết bị của bạn đã được root chưa?

Bạn có thể cần cấp quyền thực thi qua chmod cho tệp.

chmod ugo=rwx /bin/script.sh 
+0

Không có gì được thực thi, nhưng giao diện điều khiển sẽ hiển thị một vỏ là tôi có thể gõ các lệnh của tôi, với "#", có nghĩa là tôi có một truy cập root. Và có, thiết bị của tôi đã được root. Kịch bản của tôi cũng có quyền thực thi, nhưng gọi sh /bin/script.sh không cần sự cho phép này, phải không? –

+0

Ah, tôi thậm chí không nhận ra nó, nhưng bạn chính xác về việc không cần phải có quyền thực thi. Bạn có thể thử 'source /bin/script.sh' và xem nó có khác gì không (có thể là không). – DavidDraughn

0

Dường như tôi đã sử dụng một phiên bản rất đơn giản của su mà không chấp nhận đối số -c. Tôi đã sao chép một su khác đã hoạt động.AndyD là hoàn toàn đúng mặc dù, vì vậy tôi chấp nhận câu trả lời của mình thay vì của tôi :)

+1

Mỏ cũng không hoạt động. Bạn đã sao chép của bạn từ đâu? – barlop

1

này hoạt động:

adb shell echo command which needs root privileges \| su 

Nếu bạn cần chuyển hướng:

adb shell echo 'echo anytext > /data/data/aforbiddenfolder/file' \| su 

Đối với "sao chép" một tập tin địa phương với đường dẫn android cần có đặc quyền root (nhưng alocalfile không được chứa '):

cat alocalfile | adb shell echo "echo '`cat`' > /data/data/aforbiddenfolder/file" \| su 

Nếu bạn có một cách tốt hơn (ngay cả đối với su phiên bản không có -c), tôi quan tâm.

1

này làm việc cho tôi:

adb shell "su -c ./data/local/tcpdump-arm -s 0 -v -w /data/local/appxpress_dump.pcap" 
+2

Có điều gì mới về lệnh này chưa được đề cập? – slhck

+0

không có dấu ngoặc kép đơn xung quanh lệnh thiết bị. sau khi tôi gỡ bỏ tất cả mọi thứ bắt đầu làm việc. cảm ơn. – balbelias

Các vấn đề liên quan