9

Emacs TRAMPを使用して、を提供していないサーバー上のssh経由でファイルにアクセスしようとしています。その/bin/shため、接続しようとすると次のエラーが発生します。

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

そのサーバーのリモートシェルがどこにあるかをTRAMPに伝える方法はありますか?(「サーバー」はテザードAndroidスマートフォンなので、にアクセスして/system/bin/shください。)

4

2 に答える 2

6

tramp-methods変数のdocstringも参照してください。この部分は注目に値するように見えます:

  • tramp-remote-shell
    これは、リモートホストで使用するシェルを指定します。これはボーンのようなシェルでなければなりません。通常、これを「/ bin / sh」以外の値に設定する必要はありません。Trampは、チルダ拡張を実行するシェルを使用したいと考えていますが、検索することはできます。また、「/ bin / sh」はすべてのUnixenに存在することに注意してください。これは、使用することを決定した値には当てはまらない場合があります。あなたは警告されました。

編集:

したがって、既存のメソッド(この例では「scpc」)に基づいて新しいメソッドを作成し、カスタムメソッドに別のリモートシェルを与える方法は次のとおりです。

(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)))

Emacs 23(Tramp 2.1.20)では、このプロパティの名前は。であることに注意してくださいtramp-remote-sh。Emacs 24(Tramp 2.2.3-24.1)では、に変更されていtramp-remote-shellます。

そして、私はあなたがこれであなたの指定されたホストのためにデフォルトでこの方法を使うことができると推測しています:

(add-to-list
 'tramp-default-method-alist
 (list "\\`myhost\\'" nil "android"))
于 2012-05-17T03:41:37.507 に答える
-1

sshは、リモートユーザーのログインシェルを使用することを想定しています。サーバーへのrootアクセス権がある場合は、passwdファイルのエントリを変更できます。

:blah:blah:user_name:blah:/ path / to / shell

または、/ bin/shをシンボリックリンクします。

クライアント側からこれを変更する方法はないと思いますが、ある場合は、sshTRAMPではなく伝える必要があります。(これはssh_configファイルを介して行うことができます。)

編集:私は修正されたままです。

于 2012-05-17T03:32:42.017 に答える