2012-05-17 2 views
9

Ich versuche, Emacs TRAMP zu verwenden, um Dateien über ssh zugreifen, auf einem Server, der nicht /bin/sh, nicht zur Verfügung stellen und so bekomme ich folgende Fehlermeldung, wenn ich versuche, eine Verbindung zu:Verwenden von Emacs TRAMP mit einem SSH-Server, der/bin/sh nicht bereitstellt?

env: can't execute '/bin/sh': No such file or directory 

Gibt es eine Möglichkeit TRAMP zu sagen, Wo ist die Remote Shell für diesen Server? (Der "Server" ist ein verbundenes Android-Telefon, also unter /system/bin/sh.)

Antwort

6

Siehe auch den Docstring für die Variable tramp-methods. Dieser Teil scheint bemerkenswert:

  • tramp-remote-shell
    Dies gibt den Shell auf der Remote-Host zu verwenden. Diese MUSS eine Bourne-artige Shell sein. Es ist normalerweise nicht notwendig, dies auf einen anderen Wert als "/ bin/sh": Tramp möchte eine Shell verwenden, die Erweiterung zu erweitern, aber es kann dafür suchen. Beachten Sie auch, dass "/ bin/sh" für alle Unixen existiert, . Dies trifft möglicherweise nicht für den Wert zu, den Sie verwenden möchten. Sie wurden gewarnt.

Edit:

Also hier ist ein Weg, eine neue Methode auf einem vorhandenen („SCPC“ in diesem Beispiel) auf der Grundlage schaffen könnte, und dann der benutzerdefinierten Methode ein anderen Remote-Shell geben :

(require 'tramp) 
(let* ((base-method (cdr (assoc "scpc" tramp-methods))) 
     (new-method (copy-tree base-method)) 
     (rshell (assq 'tramp-remote-shell new-method))) 
    (setcdr rshell "/system/bin/sh") 
    (add-to-list 'tramp-methods (cons "android" new-method))) 

Beachten Sie, dass in Emacs 23 (Tramp 2.1.20) wurde diese Eigenschaft tramp-remote-sh benannt. In Emacs 24 (Tramp 2.2.3-24.1) wurde es geändert in tramp-remote-shell.

Und ich vermute, dass Sie diese Methode standardmäßig für Ihren angegebenen Host mit diesem verwenden können:

(add-to-list 
'tramp-default-method-alist 
(list "\\`myhost\\'" nil "android")) 
+0

Es sieht so aus, dass die Shell für alle Zugriffe über eine bestimmte Methode (z. B. ssh) festgelegt wird. Gibt es eine Möglichkeit, dies pro Host festzulegen? –

+1

Sie möchten wahrscheinlich eine neue Methode hinzufügen, die die erforderliche tram-remote-Shell verwendet, aber ansonsten mit der Methode identisch ist, auf der Sie sie aufbauen, und diese dann für den Zugriff auf den betreffenden Host verwenden. – phils

+0

Siehe auch die 'tramp-default-method-alist'-Variable, um Hosts Methoden zuzuordnen. – phils

-1

ssh erwartet die Verwendung der Login-Shell des Remote-Benutzers. Wenn Sie Root-Zugriff auf den Server haben, können Sie den Eintrag in der passwd-Datei ändern:

: blah: blah: user_name: blah:/path/to/Schale

Oder nur Symlink/bin/sh es.

Ich glaube nicht, es gibt eine Möglichkeit, dies von der Client-Seite zu ändern, aber wenn es ist, müssten Sie ssh, nicht TRAMP sagen. (Sie könnten dies über eine ssh_config-Datei tun.)

Edit: Ich stehe korrigiert.

+0

Das ist falsch. @phils hat es richtig erklärt; tramp verwendet die von 'tramp-remote-shell' angegebene Shell. Es ist auch falsch zu sagen, dass Sie ssh_config für so etwas verwenden müssen, da das Programm, das ssh ausführt, ssh mitteilen kann, welches Programm auf dem Remote-Host in der ssh-Befehlszeile ausgeführt werden soll. –

Verwandte Themen