Esta es una vieja pregunta, pero recientemente tuve curiosidad sobre esto. Encontré un método que no requiere recompilación adbd, pero sí requiere su(estoy usando Chainfire SuperSu 2.45).
Suponiendo que bashse encuentra en /system/bin/bash, y suestá en /system/xbin/su, es esencialmente algo como esto:
adb shell (use un shell interactivo. Invocar este proceso como una línea podría 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 caminos pueden diferir; uso which bashy which supara estar seguro.
chmod 777 /system/bin/sh
- Prueba de la cáscara antes de salir:
/system/bin/sh. Si se produce un error, corregir el error o revertir mediante la restauración de la copia de seguridad: cp /system/bin/sh.bak /system/bin/sh.
- Opcionalmente montaje / sistema; la mayoría de los dispositivos harán esto automáticamente:
mount -o remount,ro /system
Y tu estas listo.
Simplemente simular BASH a SH no funciona porque bash emula SH cuando se invoca de esta manera.
Sin embargo, al mirar strace, parece buscar un bashrccuando un BASH simbólico se llama como 'sh --login'. Si bien esto podría ser utilizado para "encadenar" shells a través de un script, como se mencionó anteriormente, la forma en que adbdinvoca SH está codificada.
Si hay un problema y ha eliminado (o movido) /system/bin/shADB no tendrá un shell que le permita solucionar el problema. Si esto sucede, tiene algunas opciones:
- Reinicie en una recuperación que tenga
adbd(como CWM o TWRP) y abra un shell adb para copiar /system/bin/sh.bak a / system / bin / sh nuevamente.
- Use 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.
- Use un emulador de terminal que se pueda configurar para ejecutar un shell diferente; tenga en cuenta que varios intentarán / system / bin / sh primero y forzarán el cierre.
sh, nobash, cuando uso adb para conectarme. Cual build está usando?