Wie ändere ich die Bash-Shell-Eingabeaufforderung in Cyanogenmod?

Hatte jemand Erfolg damit, die Shell-Eingabeaufforderung in Cyanogenmod zu ändern? Derzeit ist # ziemlich nutzlos, es wäre viel schöner, zumindest das Arbeitsverzeichnis anzuzeigen. Ist auch eine Tab-Vervollständigung möglich?

Normalerweise kann die Eingabeaufforderung der Bash-Shell geändert werden, indem die Umgebungsvariable geändert wird PS1.

Antworten (1)

Ich bin nicht so scharf auf das Warum, aber shauf CyanogenMod ist ein bisschen verwässert. Wie Joachim in den Kommentaren bemerkte, können Sie normalerweise PS1Ihre Eingabeaufforderung ändern, aber die Eingabeaufforderungsvariablen werden nicht richtig erweitert:

# 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

CyanogenMod wird jedoch mit einer modifizierten Version von shcalled ash(ich glaube, dies ist für Android Shell) ausgeliefert, die eine Teilmenge dieser Prompt-Variablen unterstützt. Hier sind einige Beispiele dafür, was funktioniert und was nicht, wobei das lokale Echo aus Gründen der Unordnung/des Platzes entfernt wurde:

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

Was die Tab-Vervollständigung betrifft: Ich kenne persönlich keine Möglichkeit, dies zum Laufen zu bringen. Ich stelle mir vor, das Hauptproblem besteht tatsächlich darin, dass die ADB-Shell die Eingabe puffert, bis Sie die Eingabetaste drücken, sodass die Registerkarte nicht wirklich an das Shell-Programm gesendet wird, wenn Sie sie drücken. Ein gutes Beispiel dafür ist das Öffnen einer Datei mit more. Die qTaste beendet das moreProgramm, aber Sie müssen tatsächlich drücken qund dann die Eingabetaste drücken, um das Programm zu beenden, da der erste qTastendruck erst gesendet wird, wenn Sie die Eingabetaste drücken, um den gesamten Puffer zu senden.


Okay, SSH ist ein anderes Biest. Angenommen, Sie haben einen einigermaßen gesunden Client, asherhalten Sie die Tab-Vervollständigung zusammen mit der oben erwähnten Eingabeaufforderungs-Variablenerweiterung. Wenn Sie dropbear (den ssh-Daemon, der mit CyanogenMod geliefert wird) verwenden, können Sie dies ashals Standardeingabeaufforderung konfigurieren, indem Sie sich bei Ihrem Gerät anmelden (entweder SSH oder adb shellfunktioniert hier) und Folgendes tun:

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

Dies setzt voraus /data/dropbear/.profile, dass es noch nicht existiert, da es jede vorhandene Version überschreibt (diese Datei wird jedoch nicht automatisch erstellt). Sie kann stattdessen natürlich bearbeitet werden, wenn die Datei bereits vorhanden ist. Starten Sie dann dropbear neu und melden Sie sich erneut an. Sie sollten bei einer Sitzung landen 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 #
Wie ändere ich also SSH auf dem Telefon, um die Standard-Shell von ash anstelle von sh zu haben?
@TKKocheran: Oh, ich dachte adb shellund nicht SSH. Sie erhalten die Tab-Vervollständigung ashüber eine SSH-Verbindung. Du benutzt Dropbear, nehme ich an? Um ashes standardmäßig zu verwenden, können Sie echo "/system/xbin/ash" > /data/dropbear/.profileDropbear einfach verwenden und dann neu starten.
/data/dropbear/.profile@TKKocheran: Dies setzt natürlich voraus, dass Sie noch keine Datei haben . Bearbeiten oder ergänzen Sie einfach, wenn Sie dort Dinge haben, die Sie nicht überschreiben möchten.