Wie kann ich mit screenrc ein neues Fenster im Arbeitsverzeichnis des aktuellen Fensters öffnen?
2433
Matt Joiner
Wie kann ich mit screenrc C-a cein neues Fenster im Arbeitsverzeichnis des aktuellen Fensters öffnen? Standardmäßig scheint es das neue Fenster im Arbeitsverzeichnis zu öffnen, wenn die ursprüngliche Bildschirmsitzung aufgerufen wird.
3 Antworten auf die Frage
7
Matt Eckert
Bietet standardmäßig screenauch die C-a C-cErstellung eines neuen Fensters, sodass Sie möglicherweise eine weitere Zeile hinzufügen möchten, um .screenrcdiesen Fall zu behandeln:
Füllen Sie den String stringin den Eingabepuffer des aktuellen Fensters.
screen -X chdir \$PWDteilt dem Bildschirm mit, den Befehl auszuführen chdir, der sein Betriebsverzeichnis (wo neue Bildschirmfenster beginnen werden) in die Umgebungsvariable ändert $PWD, die das aktuelle Arbeitsverzeichnis enthält. Dies ist unmöglich, .screenrcalleine zu tun . Daher stuffist es notwendig, den Eingangspuffer zu manipulieren .
Der screenBefehl innerhalb eines laufenden Befehls screenerstellt ein neues Fenster C-a C-c.
^Mgeneriert einen Wagenrücklauf, der der Shell mitteilt, den Befehl auszuführen, der sich jetzt im Puffer befindet. Ohne das müssten Sie enter(oder C-mnatürlich) drücken .
Demzufolge hinterlässt diese Bindung Cruft so in dem Fenster, in dem Sie sie ausführen:
Irgendeine Idee, warum das ^ M nicht notwendig ist?
Matt Joiner vor 13 Jahren
0
Es ist notwendig, damit am Ende der `stuff`-Zeichenfolge ein Wagenrücklauf generiert wird.
Matt Eckert vor 13 Jahren
1
Irgendwelche Ideen, wie dies in einer benannten Bildschirmsitzung funktioniert? http://superuser.com/questions/1038576/gnu-screen-open-new-window-in-working-directory-of-current-window-in-a-named_mattEckert
Paul Caheny vor 8 Jahren
0
Ich werde es auf meiner Remote-Shell ausprobieren und melden, ob es für mich funktioniert.
edit: Ja, es funktioniert. Der erste "bind" -Befehl wird tatsächlich nicht benötigt.
Ich habe diese Antwort gelesen, aber das Zeug war ein Platzhalter für etwas anderes. Was bedeutet das ^ M in Ihrem obigen Codebeispiel?
Matt Joiner vor 13 Jahren
1
Das hat es geschafft, aber ohne das zusätzliche M, war dies vielleicht vom Kopieren-Einfügen?
Matt Joiner vor 13 Jahren
0
Damit der Bildschirm im aktuellen Verzeichnis eine neue Registerkarte / ein neues Fenster öffnet, können Sie Ihrer .screenrcDatei den folgenden Code hinzufügen :
bind c stuff "screen bash^M"
Dies bewirkt, dass der Befehl Ctrl+ acneue Tabs / Fenster im Verzeichnis des aktuellen Fensters / Tabs öffnet.
Hinweis: Sie müssen sicherstellen, dass screensie nicht einen Start Login - Shell standardmäßig, weil das den Shell Start im Standardverzeichnis für ein Login - Shell verursacht, anstatt das aktuelle Verzeichnis. Dies bedeutet, dass .screenrcIhr shellBefehl in Ihrer Datei keinen Bindestrich ('-') enthalten darf.
Dies ist beispielsweise falsch (dh es wird eine Login-Shell gestartet):
shell -$SHELL
Dies ist jedoch richtig (dh es wird keine Login-Shell gestartet):
shell $SHELL
Hinweis 2: Leider verhält sich diese Methode nicht genau wie der Standardbefehl new window / tab in screen. Stattdessen schreibt er den Befehl in das aktuelle Fenster und führt ihn aus, um das neue Fenster / die neue Registerkarte zu erstellen. Er funktioniert daher nicht während eines langen Shell-Prozesses. Mit anderen Worten, diese Tastenkombination kann nur ausgeführt werden, wenn normale Shellbefehle ausgeführt werden können.
Hinweis 3: Wenn Sie screenneue Fenster / Registerkarten im aktuellen Verzeichnis öffnen und eine Login-Shell öffnen möchten, können Sie Ihrer .screenrcDatei den folgenden Code hinzufügen :