1 votes

Comment modifier l'invite du shell Bash dans Cyanogenmod ?

Quelqu'un a-t-il réussi à modifier l'invite du shell dans Cyanogenmod ? Actuellement, # est assez inutile, il serait beaucoup plus agréable d'afficher au moins le répertoire de travail. De plus, la saisie par tabulation est-elle possible ?

2voto

David Negron Points 971

Je n'aime pas trop le pourquoi, mais sh sur CyanogenMod est un peu édulcoré. Comme Joachim l'a noté dans les commentaires, habituellement vous pouvez modifier PS1 pour changer votre invite, mais il ne développe pas correctement les variables d'invite :

# ps $$  <-- Just showing that the current shell is /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 should be PWD

Cependant, CyanogenMod est livré avec une version modifiée de l'interface utilisateur. sh appelé ash (je crois que c'est pour Android Shell), qui supporte un sous-ensemble de ces variables d'invite. Voici quelques exemples de ce qui fonctionne et ne fonctionne pas, avec l'écho local supprimé pour des raisons de clarté et d'espace :

# 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 #

Quant à la complétion des onglets : Je ne connais personnellement aucun moyen de la faire fonctionner. J'imagine que le principal problème est que le shell adb met en mémoire tampon les entrées jusqu'à ce que vous appuyiez sur la touche Entrée, de sorte que la tabulation n'est pas réellement envoyée au programme shell lorsque vous appuyez dessus. Une bonne illustration de ceci est d'ouvrir un fichier avec more . Le site q permet de quitter le more mais vous devez en fait appuyer sur q puis appuyez sur la touche Entrée pour quitter parce que l'écran initial q n'est pas envoyée tant que vous n'avez pas appuyé sur la touche Entrée pour envoyer la totalité du tampon.


Ok, SSH est une bête différente. En supposant que vous ayez un client raisonnablement sain. ash vous donnera la possibilité de compléter les tabulations ainsi que l'expansion de la variable d'invite mentionnée ci-dessus. Si vous utilisez dropbear (le démon ssh livré avec CyanogenMod), vous pouvez alors configurer ash pour être l'invite par défaut en vous connectant à votre appareil (soit par SSH, soit par l'intermédiaire d'une carte de crédit). adb shell fonctionne ici) et faire ce qui suit :

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

Cela suppose /data/dropbear/.profile n'existe pas encore, car il écrasera toute version existante (ce fichier n'est cependant pas créé automatiquement). Il peut être édité à la place si le fichier existe déjà, bien sûr. Ensuite, redémarrez dropbear et connectez-vous à nouveau. Vous devriez arriver à un ash session :

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 #

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X