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?
Ich bin nicht so scharf auf das Warum, aber sh
auf CyanogenMod ist ein bisschen verwässert. Wie Joachim in den Kommentaren bemerkte, können Sie normalerweise PS1
Ihre 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 sh
called 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 more
Programm, 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, ash
erhalten 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 ash
als Standardeingabeaufforderung konfigurieren, indem Sie sich bei Ihrem Gerät anmelden (entweder SSH oder adb shell
funktioniert 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 #
adb shell
und nicht SSH. Sie erhalten die Tab-Vervollständigung ash
über eine SSH-Verbindung. Du benutzt Dropbear, nehme ich an? Um ash
es standardmäßig zu verwenden, können Sie echo "/system/xbin/ash" > /data/dropbear/.profile
Dropbear 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.
Joachim Sauer
PS1
.