Direkt geöffnete Remote Shell mit Tramp in Emacs

4455
jmlorenzi

Ich finde, dass die beste Methode zum Ausführen meiner Shells auf Remote-Computern in emacs die Verwendung von TRAMP ist (die Verwendung des sshBefehls in einer lokalen Shell funktioniert nicht für meine Anforderungen). Ich weiß jedoch nur, wie man eine TRAMP-Shell ausführt, wenn ich zuerst eine Remote-Datei mit diesem Puffer besuche C-x C-fund dann M-x shellaus diesem Puffer mache . Ich möchte jedoch mit TRAMP eine Shell in einer Remote-Maschine öffnen, bevor ich eine Datei auf diesem Remote-Host öffne. Ich kann jedoch keine Erklärung finden, wie dies bei meinen Suchvorgängen ausgeführt wird. Kann man das machen?

4
Bitte fügen Sie einige zusätzliche Erklärungen hinzu, wonach Sie suchen. Offensichtlich sind Sie fortgeschrittener als Sie wissen möchten, wie Sie von einem Shell-Puffer aus in einen Remote-Computer einbinden können. Dies ist jedoch die Richtung, in die Ihre Frage den Leser führt. Möchten Sie also, dass eine Funktion einen Shell-Puffer öffnet und automatisch ssh auf Ihrem Remote-Computer öffnet - damit Sie auf dem Remote-Server an einer Eingabeaufforderung und einem Pfad teilnehmen? Oder möchten Sie, dass ein Shell-Modus-Puffer bereits geöffnet ist, und drücken Sie einfach einen Auto-Login-Befehl? Verwenden Sie "sshpass"? Möchten Sie jedes Mal Ihr Passwort eingeben? lawlist vor 9 Jahren 0
Danke, @lawlist! Ich habe die Frage in der Hoffnung umformuliert, dass sie klarer ist. Zur Beantwortung Ihrer Fragen: Ich möchte auf eine Art und Weise, wie ich einen entfernten Shell-Puffer in einem von mir angegebenen Rechner trampeln kann. Das erwartete Verhalten ist, dass Emacs bei meinem Versuch nach meinem Passwort fragt. jmlorenzi vor 9 Jahren 0

3 Antworten auf die Frage

4
Michael Albinus

Tramp kommt ins Spiel, wenn das Standardverzeichnis remote ist. Sie können es also ändern, wenn Sie eine entfernte Datei (oder ein Verzeichnis) im Voraus öffnen.

Sie könnten jedoch einen kleinen Befehl wie folgt schreiben:

(defun my-shell () (interactive) (let ((default-directory "/ssh:user@host:")) (shell)))

Dann kannst du anrufen M-x my-shell

Wenn emacs unter Windows läuft und Sie sich an einem Linux-Host anmelden möchten, können Sie mit `Mx anpassen-variable`` expliziter Shell-Dateiname `` bin \ bash` festlegen, um fehlende Shell-Fehler zu vermeiden. kwarnke vor 5 Jahren 0
2
mandark

Ich verwende dired, um auf die Remote-Maschine zuzugreifen und dort eine Shell zu öffnen.

Hier ist die Funktion, die ich aus der Emacs-Konfiguration von Tikhon Jelviss genommen und geändert habe :

(defun anr-shell (buffer) "Opens a new shell buffer where the given buffer is located." (interactive "sBuffer: ") (pop-to-buffer (concat "*" buffer "*")) (unless (eq major-mode 'shell-mode) (dired buffer) (shell buffer) (sleep-for 0 200) (delete-region (point-min) (point-max)) (comint-simple-send (get-buffer-process (current-buffer))  (concat "export PS1=\"\033[33m" buffer "\033[0m:\033[35m\\W\033[0m>\"")))) 

Beispiel:

(anr-shell "/vagrant@localhost#2222:/vagrant/") 
Bitte veröffentlichen Sie die Antwort hier erneut, da Links zur eigentlichen Antwort nicht empfohlen werden, um Linkfäule zu vermeiden Jarmund vor 9 Jahren 0
Die Antwort wurde erneut veröffentlicht. mandark vor 9 Jahren 0
Abstimmung hat sich entsprechend geändert. Jarmund vor 9 Jahren 0
0
Phil

Obwohl es nicht allzu deutlich gemacht, im Handbuch C-u M-x shellkönnen Sie den Namen des Shell - Puffer zu spezifizieren, und was noch wichtiger ist in Ihrem Fall können Sie das angeben Default directory, die genau wie Tramp eine Zeichenfolge nehmen /ssh:server:/my/path.

Eine Alternative ist das Öffnen von dired ( C-x d) anstelle einer tatsächlichen Datei. Wenn Sie M-x shellaus dem Verzeichnis heraus die Shell öffnen, wird der Kontext des Verzeichnisses mit dem Verzeichnis geöffnet.