Esta es una pregunta antigua, pero hace poco sentí curiosidad por esto. Encontré un método que no requiere recompilar adbd
Sin embargo, requiere su
(Estoy usando Chainfire SuperSu 2.45).
Suponiendo que bash
se encuentra en /system/bin/bash
y su
está en /system/xbin/su
Esencialmente es algo así:
adb shell
(utilice un shell interactivo. Invocar este proceso como un puede hacer que ADB deje de funcionar si hay un problema)
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
Tenga en cuenta que sus rutas pueden ser diferentes; utilice which bash
y which su
para estar seguros.
chmod 777 /system/bin/sh
- Prueba la cáscara antes de salir:
/system/bin/sh
. Si te da un error, corrige el error o revierte restaurando la copia de seguridad: cp /system/bin/sh.bak /system/bin/sh
.
- Opcionalmente, vuelva a montar /system; la mayoría de los dispositivos lo harán automáticamente:
mount -o remount,ro /system
Y ya está.
El simple enlace simbólico de BASH a SH no funciona porque bash emula a SH cuando es invocado de esta manera.
Sin embargo, echando un vistazo a strace, parece que busca un bashrc
cuando se llama a un BASH simbolizado como 'sh --login'. Aunque esto podría utilizarse para "encadenar" shells a través de script, como se mencionó anteriormente la forma adbd
invoca a SH está codificado.
Si hay un problema y ha eliminado (o movido) /system/bin/sh
ADB no tendrá un intérprete de comandos para solucionar el problema. Si esto sucede, usted tiene algunas opciones:
- Reiniciar en una recuperación que tiene
adbd
(como CWM o TWRP) y abrir un adb shell en él, para copiar /system/bin/sh.bak a /system/bin/sh de nuevo.
- Utiliza adb para copiar la copia de seguridad:
adb root; adb remount; adb shell; adb pull /system/bin/sh.bak; adb push sh.bak /system/bin/sh
Tenga en cuenta que esto no funcionará en todos los dispositivos; algunos se niegan a permitir que adb vuelva a montar /system rw de esta manera.
- Utilice un emulador de terminal que pueda ser configurado para ejecutar un shell diferente; tenga en cuenta que varios intentarán primero /system/bin/sh y forzarán el cierre.
0 votos
Vanilla CM7 (construido desde el código fuente) me deja en
sh
nobash
cuando uso adb para conectarme. ¿Qué construcción está utilizando?0 votos
Es 7.1.0.1 para la ViewSonic G Tablet. Sin embargo, no construí desde las fuentes.