Wie kann ich mit screenrc ein neues Fenster im Arbeitsverzeichnis des aktuellen Fensters öffnen?

2428
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.

2

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:

bind c stuff "screen -X chdir \$PWD;screen^M" bind ^c stuff "screen -X chdir \$PWD;screen^M" 

Erläuterung, wie dieser Befehl funktioniert:

  1. stuffsetzt seinen Argumentstring direkt in das aktuelle Fenster :

    Befehl: stuff string

    Füllen Sie den String stringin den Eingabepuffer des aktuellen Fensters.

  2. 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 .

  3. Der screenBefehl innerhalb eines laufenden Befehls screenerstellt ein neues Fenster C-a C-c.

  4. ^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:

user@host:~/directory$ screen -X chdir $PWD;screen user@host:~/directory$ 
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
0
jáquer

Basierend auf dieser SO-Antwort sollte dies funktionieren:

bind c stuff "screen -X chdir \$PWD; screen^M" 

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
0
stiemannkj1

Hier ist eine Kopie meiner eigenen Antwort auf eine ähnliche Frage auf stackoverflow.com :

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+ a cneue 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 :

bind c stuff "screen bash -l^M"