Acabo de rootear mi antiguo teléfono con Android 2.3.3 y me gustaría definir algunos alias para cada shell que inicio (con adb o aplicación de terminal). Encontré esta pregunta donde una respuesta dice que /etc/profile
(= /system/etc/profile
debido a un enlace suave /etc
-> /system/etc
) es uno de los archivos que el shell obtiene al inicio. Pero esta publicación habla de /system/bin/sh
ser un enlace a /system/bin/mksh
, que no es el caso en mi sistema 2.3.3.
A pesar de que strings sh
se produce /etc/profile
como una salida, el archivo no tiene fuente.
¿Alguien conoce la versión anterior de Android y si tengo la oportunidad de obtener /etc/profile o algún otro archivo que se origine en el inicio de Shell? Pensé que podría ser un problema de permisos, pero incluso rwxrwxr-x no ayuda.
Como escribí en la otra pregunta , adb shell
no inicia un shell de inicio de sesión. Solo los shells de inicio de sesión leen /etc/profile
.
Como puede ver en la fuente sh de Android 2.3.3, main.c
líneas 175ff. solo si argv[0]
comienza con un guión-menos, el shell se considera un shell de inicio de sesión. Sin embargo, unas líneas más abajo (líneas 185 y siguientes) hay un código para leer el contenido de $ENV
.
Entonces podrías engañarlo e ingresar el siguiente código después de ingresar adb shell
al modo:
ENV=/etc/profile sh
Probablemente pueda usar exec
para reemplazar el shell actual, pero este es el tipo más corto que se me ocurre, ya que tendrá que escribirlo cada vez.
Alternativamente, puede compilar mksh
para Android 2.3 (funciona al menos hasta 1.5, si no es anterior) manualmente (el archivo Android.mk es específico de la versión, desafortunadamente, por lo que tendrá que llamar a Build.sh directamente) y agregar el binary, luego reemplace el valor predeterminado sh
con él (lo probé primero con Android 1.6; cuanto más nueva se usó la versión mksh, mejor, ya que las versiones anteriores tenían errores, por ejemplo, impidiendo que adb install
funcionara).
Descargo de responsabilidad: soy el desarrollador de mksh .