¿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?
Respuesta
¿Demasiados anuncios?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 #