Це старе питання, але мені нещодавно було цікаво про це самому. Я знайшов метод, який не потребує перекомпіляції adbd
, проте він вимагає su
(я використовую Chainfire SuperSu 2.45).
Якщо припустити, що bash
він знаходиться /system/bin/bash
і su
знаходиться /system/xbin/su
, він є щось подібне:
adb shell
(використовуйте інтерактивну оболонку. Якщо виклик цього процесу як однолінійного каналу, ADB може перестати працювати, якщо є проблема)
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
Зауважте, що ваші шляхи можуть відрізнятися; використовувати which bash
і which su
бути впевненим.
chmod 777 /system/bin/sh
- Перевірте шкаралупу , перш ніж вийти:
/system/bin/sh
. Якщо ви отримуєте помилку, виправити помилку або відновити шляхом відновлення резервної копії: cp /system/bin/sh.bak /system/bin/sh
.
- Необов'язково перераховувати / систему; більшість пристроїв зробить це автоматично:
mount -o remount,ro /system
І ви закінчили.
Просто посилання BASH на SH не працює, тому що bash імітує SH, коли викликається таким чином.
Однак, дивлячись на страйс, схоже, він шукає, bashrc
коли символічний BASH називається "sh --login". Хоча це може бути використане для "завантаження" оболонок за допомогою скрипту, як було зазначено вище, спосіб adbd
викликання SH жорстко кодується.
Якщо виникла проблема, і ви видалили (або перемістили) /system/bin/sh
ADB, у вас немає оболонки, яка допоможе вам усунути проблему. Якщо це сталося, у вас є кілька варіантів:
- Перезавантажте у відновлення, яке має
adbd
(наприклад, CWM або TWRP), і відкрийте до нього оболонку adb, щоб скопіювати /system/bin/sh.bak знову в / system / bin / sh.
- Використовуйте adb, щоб скопіювати резервну копію.
adb root; adb remount; adb shell; adb pull /system/bin/sh.bak; adb push sh.bak /system/bin/sh
Зверніть увагу, що це працюватиме не на всіх пристроях; деякі відмовляються дозволити adb перераховувати / system rw таким чином.
- Використовуйте термінальний емулятор, який можна встановити для запуску іншої оболонки; зауважте, що декілька спершу спробують / system / bin / sh та примусово закрити.
sh
відмовляється від мене , ніbash
, коли я використовую adb для з'єднання. Яку збірку ви використовуєте?