Cuando agrego un dispositivo con Cyanogenmod, se me presenta un bonito bash shell, un indicador de color y bashrc. No veo un enlace simbólico de / system / xbin / bash a / system / bin / sh. ¿Cómo configuran el shell predeterminado para bash en lugar de sh? Miré a través de los archivos rc, pero no encontré nada. Me gustaría hacer lo mismo en mi compilación de Android, que no es Cyanogenmod.
Actualizar
Después de volver a instalar desde cero con CM7, me llevan a sh en lugar de bash. Ahora la pregunta es cómo configurar bash como predeterminado.
cyanogenmod
bash
Ravi
fuente
fuente
sh
, nobash
, cuando uso adb para conectarme. Cual build está usando?Respuestas:
Cuando
adb shell
se ejecuta, el lado de Android también inicia adb que luego se ejecuta/system/bin/sh -
. Este camino está codificado ensystem/core/adb/services.c
:Si desea cambiar esto a bash, tendrá que volver a compilarlo.
Es posible ejecutar algunos comandos desde el archivo cuando se ejecuta el shell interactivo. Como está escrito
system/core/sh/main.c
,sh -
(tenga en cuenta el-
modo interactivo) lee de los siguientes archivos (en este orden):/etc/profile
.profile
(en relación con el directorio actual, esto es/.profile
paraadb shell
$ENV
(la variable de entornoENV
debe apuntar a un archivo)Como
/etc/
y/
son de solo lectura, la única forma de cargar algo era mediante la configuraciónENV
. Probablemente pueda crear un enlace simbólico desde/etc/profile
a/data/profile
montando/
lectura-escritura (ejercicio para el lector).fuente
No tenía mi Android conmigo ahora para probar, pero con el emulador de terminal de Android si va al menú, podría usar la opción "Línea de comando" o "Comando inicial".
fuente
Esta es una vieja pregunta, pero recientemente tuve curiosidad sobre esto. Encontré un método que no requiere recompilación
adbd
, pero sí requieresu
(estoy usando Chainfire SuperSu 2.45).Suponiendo que
bash
se encuentra en/system/bin/bash
, ysu
está 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; usowhich bash
ywhich su
para estar seguro.chmod 777 /system/bin/sh
/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
.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
bashrc
cuando 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 queadbd
invoca SH está codificada.Si hay un problema y ha eliminado (o movido)
/system/bin/sh
ADB no tendrá un shell que le permita solucionar el problema. Si esto sucede, tiene algunas opciones:adbd
(como CWM o TWRP) y abra un shell adb para copiar /system/bin/sh.bak a / system / bin / sh nuevamente.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.fuente
En su PC, obtenga un binario bash y sobrescriba
/system/bin/sh
. Tengo uno aqui .Siéntase libre de copiar este código:
fuente