Kiedy adbuję się w urządzenie z Cyanogenmod, pojawia się mi ładna powłoka bash, kolor zachęty i bashrc. Nie widzę dowiązania symbolicznego z / system / xbin / bash do / system / bin / sh. Jak ustawiają domyślną powłokę na bash zamiast sh? Przeglądałem pliki rc, ale nic nie znalazłem. Chciałbym zrobić to samo na mojej wersji Androida, która nie jest Cyanogenmod.
Aktualizacja
Po ponownej instalacji od zera za pomocą CM7, jestem przeniesiony do sh zamiast bash. Teraz pytanie brzmi, jak ustawić bash jako domyślny.
cyanogenmod
bash
Ravi
źródło
źródło
sh
, niebash
, kiedy używam adb do połączenia. Jakiej wersji używasz?Odpowiedzi:
Po
adb shell
uruchomieniu strona z Androidem uruchamia również adb, który następnie się uruchamia/system/bin/sh -
. Ta ścieżka jest na stałe zakodowana wsystem/core/adb/services.c
:Jeśli chcesz zmienić to na bash, będziesz musiał go ponownie skompilować.
Możliwe jest wykonanie niektórych poleceń z pliku podczas uruchamiania interaktywnej powłoki. Jak napisano w
system/core/sh/main.c
,sh -
(pamiętać, że-
w trybie interaktywnym) odczytuje z następujących plików (w tej kolejności):/etc/profile
.profile
(w stosunku do bieżącego katalogu, to jest/.profile
dlaadb shell
$ENV
(zmienna środowiskowaENV
powinna wskazywać na plik)Jak
/etc/
i/
są tylko do odczytu, jedynym sposobem, aby dostać coś załadowany był przez ustawienieENV
. Prawdopodobnie możesz utworzyć dowiązanie symboliczne od/etc/profile
do/data/profile
, instalując/
odczyt-zapis (ćwiczenie dla czytelnika).źródło
W tej chwili nie miałem ze sobą Androida do testowania, ale jeśli emulujesz terminal, korzystając z emulatora terminala Android , możesz użyć opcji „Wiersz poleceń” lub „Polecenie początkowe”.
źródło
To stare pytanie, ale sam ostatnio byłem tym ciekawy. Znalazłem metodę, która nie wymaga ponownej kompilacji
adbd
, jednak wymaga jejsu
(używam Chainfire SuperSu 2.45).Zakładając, że
bash
znajduje się w/system/bin/bash
, isu
jest w/system/xbin/su
, jest to zasadniczo coś takiego:adb shell
(użyj interaktywnej powłoki. Wywołanie tego procesu jako jednowierszowego może spowodować, że ADB przestanie działać, jeśli wystąpi problem)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
Pamiętaj, że twoje ścieżki mogą się różnić; użyjwhich bash
iwhich su
dla pewności.chmod 777 /system/bin/sh
/system/bin/sh
. Jeśli pojawi się błąd, napraw błąd lub przywróć, przywracając kopię zapasową:cp /system/bin/sh.bak /system/bin/sh
.mount -o remount,ro /system
I jesteś skończony.
Po prostu symlinkowanie BASH do SH nie działa, ponieważ bash emuluje SH po wywołaniu w ten sposób.
Jednak patrząc na strace, wydaje się, że szuka,
bashrc
kiedy BASH z dowiązaniem symbolicznym jest nazywany „sh -login”. Chociaż można tego użyć do „ładowania łańcucha” powłok za pomocą skryptu, jak wspomniano powyżej, sposóbadbd
wywoływania SH jest zakodowany na stałe.Jeśli występuje problem i usunąłeś (lub przeniosłeś)
/system/bin/sh
ADB, nie będziesz miał powłoki, która da ci rozwiązanie problemu. Jeśli tak się stanie, masz kilka opcji:adbd
(np. CWM lub TWRP) i otwórz do niego powłokę adb, aby ponownie skopiować /system/bin/sh.bak do / system / bin / sh.adb root; adb remount; adb shell; adb pull /system/bin/sh.bak; adb push sh.bak /system/bin/sh
Pamiętaj, że to nie zadziała na wszystkich urządzeniach; niektórzy odmawiają zezwalania adb na ponowne podłączenie / system rw w ten sposób.źródło
Na komputerze otrzymasz bash binarny i nadpisuj
/system/bin/sh
. Mam tutaj jeden .Skopiuj ten kod:
źródło