Ketika saya adb ke perangkat dengan Cyanogenmod, saya disajikan dengan shell bash yang bagus, color prompt, dan bashrc. Saya tidak melihat symlink dari / system / xbin / bash ke / system / bin / sh. Bagaimana mereka mengatur shell default ke bash, bukan sh? Saya melihat-lihat file rc, tetapi tidak menemukan apa pun. Saya ingin melakukan hal yang sama di Android build saya, yang bukan Cyanogenmod.
Memperbarui
Setelah menginstal ulang dari awal dengan CM7, saya dibawa ke sh bukannya bash. Sekarang pertanyaannya adalah bagaimana mengatur bash sebagai default.
cyanogenmod
bash
Ravi
sumber
sumber
sh
, tidakbash
, ketika saya menggunakan adb untuk menghubungkan. Membangun apa yang Anda gunakan?Jawaban:
Saat
adb shell
dijalankan, sisi Android juga meluncurkan adb yang kemudian dijalankan/system/bin/sh -
. Jalur ini dikode dalamsystem/core/adb/services.c
:Jika Anda ingin mengubahnya menjadi bash, Anda harus mengkompilasi ulang.
Dimungkinkan untuk menjalankan beberapa perintah dari file saat menjalankan shell interaktif. Seperti yang ditulis
system/core/sh/main.c
,sh -
(perhatikan-
untuk mode interaktif) membaca dari file-file berikut (dalam urutan ini):/etc/profile
.profile
(relatif terhadap direktori saat ini, ini/.profile
untukadb shell
$ENV
(variabel lingkunganENV
harus mengarah ke file)Sebagai
/etc/
dan/
hanya-baca, satu-satunya cara untuk mendapatkan sesuatu dimuat adalah dengan menetapkanENV
. Anda mungkin dapat membuat symlink dari/etc/profile
ke/data/profile
dengan memasang/
baca-tulis (latihan untuk pembaca).sumber
Saya tidak memiliki Android saya untuk diuji sekarang, tetapi dengan Android Terminal Emulator jika Anda masuk ke menu, Anda mungkin dapat menggunakan opsi "Command line" atau "Initial command".
sumber
Ini adalah pertanyaan lama, tetapi saya sendiri baru-baru ini ingin tahu tentang ini. Saya menemukan metode yang tidak memerlukan kompilasi ulang
adbd
, tetapi itu memang membutuhkansu
(Saya menggunakan Chainfire SuperSu 2.45).Dengan asumsi
bash
terletak di/system/bin/bash
, dansu
di/system/xbin/su
, pada dasarnya sesuatu seperti ini:adb shell
(gunakan shell interaktif. Menggunakan proses ini sebagai one-liner dapat menyebabkan ADB berhenti bekerja jika ada masalah)mount -o remount,rw /system
mv /system/bin/sh /system/bin/sh.bak
echo -e '#!/system/bin/bash\n/system/xbin/su -mm -l -s /system/xbin/bash' > /system/bin/sh
Perhatikan bahwa jalur Anda mungkin berbeda; gunakanwhich bash
danwhich su
untuk memastikan.chmod 777 /system/bin/sh
/system/bin/sh
. Jika Anda mendapatkan error, memperbaiki kesalahan atau revert dengan mengembalikan cadangan:cp /system/bin/sh.bak /system/bin/sh
.mount -o remount,ro /system
Dan kamu sudah selesai.
Cukup dengan menghubungkan BASH ke SH tidak berfungsi karena bash mengemulasi SH ketika dipanggil dengan cara ini.
Namun, setelah melihat strace, sepertinya mencari
bashrc
ketika BASH yang disatukan disebut sebagai 'sh --login'. Meskipun hal ini bisa digunakan untuk "chainload" shell melalui skrip, seperti yang disebutkan di atas caraadbd
memanggil SH adalah hardcode.Jika ada masalah dan Anda telah menghapus (atau pindah)
/system/bin/sh
ADB tidak akan memiliki shell untuk memberi Anda memperbaiki masalahnya. Jika ini terjadi, Anda memiliki beberapa opsi:adbd
(seperti CWM atau TWRP) dan buka adb shell untuk itu, untuk menyalin /system/bin/sh.bak lagi ke / system / bin / sh.adb root; adb remount; adb shell; adb pull /system/bin/sh.bak; adb push sh.bak /system/bin/sh
Perhatikan bahwa ini tidak akan berfungsi pada semua perangkat; beberapa menolak untuk mengizinkan adb melakukan remount / sistem rw dengan cara ini.sumber
Di PC Anda, dapatkan bash binary dan timpa
/system/bin/sh
. Saya punya satu di sini .Silakan menyalin kode ini:
sumber