1 votos

¿Cómo modificar el indicador de shell Bash en Cyanogenmod?

¿Alguien ha tenido éxito modificando el indicador de shell en Cyanogenmod? Actualmente, # es bastante inútil, sería mucho mejor al menos mostrar el directorio de trabajo. Además, ¿es posible la autocompletación de tabulación?

2voto

David Negron Puntos 971

No soy muy adepto al por qué, pero sh en CyanogenMod está un poco limitado. Como señaló Joachim en los comentarios, normalmente puedes modificar PS1 para cambiar tu prompt, pero no expande correctamente las variables del prompt:

# ps $$  <-- Solo mostrando que la shell actual es /system/bin/sh
ps $$
USER     PID   PPID  VSIZE  RSS     WCHAN    PC         NAME
root      1055  129   756    340   c006abb8 afd0c44c S /system/bin/sh
# echo $PS1
echo $PS1
#
# PS1="\w # "
PS1="\w # "
\w #   <-- \w debería ser PWD

Sin embargo, CyanogenMod viene con una versión modificada de sh llamada ash (creo que es para Android Shell), la cual soporta un subconjunto de estas variables de prompt. Aquí hay algunos ejemplos de qué funciona y qué no, con el eco local eliminado por cuestiones de espacio:

# ash
~ # echo $PS1
\w \$
~ # PS1="\u \w \\$ "
root ~ # PS1="\t \w \\$ "
         ~ # PS1="\l \w \\$ "
l ~ # PS1="\H \w \\$ "
H ~ # PS1="\h \w \\$ "  
localhost ~ # cd /sdcard
localhost /mnt/sdcard #

En cuanto a la autocompletación de pestañas: Personalmente no conozco una forma de hacer que funcione. Imagino que el problema principal es que la shell adb guarda la entrada hasta que presionas enter, por lo que la pestaña no se envía realmente al programa de la shell cuando la presionas. Una buena ilustración de esto es abrir un archivo con more. La tecla q sale del programa more, pero en realidad debes presionar q y luego enter para salir porque la pulsación inicial de q no se envía hasta que presionas enter para enviar todo el buffer.


Bien, SSH es una bestia diferente. Suponiendo que tengas un cliente razonablemente sensato, ash te brindará autocompletación de pestañas junto con la expansión de variables de prompt mencionada anteriormente. Si estás utilizando dropbear (el daemon SSH que viene con CyanogenMod) entonces puedes configurar ash para ser el prompt predeterminado iniciando sesión en tu dispositivo (ya sea por SSH o con adb shell) y haciendo lo siguiente:

# echo "/system/xbin/ash" > /data/dropbear/.profile

Esto asume que /data/dropbear/.profile aún no existe, ya que sobrescribirá cualquier versión existente (este archivo no se crea automáticamente, sin embargo). Por supuesto, se puede editar en su lugar si el archivo ya existe. Luego reinicia dropbear e inicia sesión nuevamente. Deberías aterrizar en una sesión de ash:

login as: root
Authenticating with public key "rsa-key-20110718"
TRACE (1391): entering fake-getpwnam
TRACE (1391): leaving fake-getpwnam
TRACE (1391): enter sign_key_free
TRACE (1391): enter dsa_key_free
TRACE (1391): leave dsa_key_free
TRACE (1391): enter rsa_key_free
TRACE (1391): leave rsa_key_free
TRACE (1391): leave sign_key_free
/data/dropbear # ps $$
USER     PID   PPID  VSIZE  RSS     WCHAN    PC         NAME
root      1392  1391  1084   416   c006abb8 afd0c44c S /system/xbin/ash
/data/dropbear #

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X