マルチホップトランプは余分なキャリッジリターンを追加し、出力によって混乱します

私はTrampを使用してVM上で動作するDockerコンテナにログインしようとしています。

My Docker関連の設定は次のようになります。

(add-to-list 'tramp-methods
             '("docker-exec"
               (tramp-login-program "docker")
               (tramp-login-args
                (("exec" "-ti") ("%h") ("/bin/sh")))
               (tramp-remote-shell "/bin/sh")
               (tramp-remote-shell-args ("-i") ("-c"))))

私はマシン上でコンテナ内のディレクトリにアクセスするためにこれを使うことができますが、次のようにリモートマシンに "ホップ"しようとします: Cx Cf /ssh:root @ vm | docker-exec: trampは行末に ^ M 文字を追加するので、最初に ls コマンドについて混乱します。したがって、 ls -find-executable は、無効なコマンドを生成する/usr/bin/ls ^ M のようなものを返します。

私はこれを克服することができました:

(defun my/tramp-find-executable
    (func vec progname dirlist &optional ignore-tilde ignore-path)
  (org-trim (funcall func vec progname dirlist ignore-tilde ignore-path)))

(advice-add 'tramp-find-executable
            :around 'my/tramp-find-executable)

しかし、今私はこのエラーが表示されます:

byte-code: Wrong type argument: number-or-marker-p, //DIRED-OPTIONS//

ログは次のようになります。

//DIRED-OPTIONS// --quoting-style=literal
///c92423c4fd16f4857a1b9d765f804f3e#$
17:32:16.175776 tramp-get-connection-property (7) # check-remote-echo nil
17:32:16.175817 tramp-get-connection-property (7) # check-remote-echo nil
17:32:16.175869 tramp-wait-for-regexp (6) # 
  total 292
  drwxr-xr-x  18 root root   4096 Feb 24 09:08 .
  drwxr-xr-x  18 root root   4096 Feb 24 09:08 ..
  -rwxr-xr-x   1 root root      0 Feb 24 09:08 .dockerenv
  -rwxr-xr-x   1 root root      0 Feb 24 09:08 .dockerinit
  lrwxrwxrwx   1 root root      7 Mar 30  2015 bin -> usr/bin
<<< skipped >>>
  drwxrwxrwt   2 root root   4096 Feb 24 15:29 tmp
  drwxr-xr-x  13 root root   4096 Mar 30  2015 usr
  drwxr-xr-x  18 root root   4096 Mar 30  2015 var
//DIRED// 59 60 108 110 158 168 216 227 275 278 337 340 388 391 439 443 491 494 553 558 619 629 677 682 730 733 781 784 832 836 884 888 936 939 987 991 1051 1058 1106 1109 1157 1160 1208 1217 1265 1268 1316 1319 1367 1370
//DIRED-OPTIONS// --quoting-style=literal
///c92423c4fd16f4857a1b9d765f804f3e#$

私はTrampがこのエラーを受け取ったときに何をしようとしているのか分からないので、修正する方法は考えられません。しかし、これは既知のバグでしょうか?あるいは、 ^ M を追加しないように、Trampの設定を追加する必要がありますか? (どちらのマシンもLinuxを実行しているので、CentOSの両方で元の出力になっているとは思えません。

3
これらのCRを追加するのはTrampではありませんが、Tramp、SSH、Dockerの設定で追加される可能性があります。 .ssh/config に設定されているオプションはありますか?特に RequestTTY はこれを引き起こします。
追加された 著者 CodingWithoutComments,
私はドッカーに慣れていませんが、なぜあなたは -t オプションを渡しますか?これはターミナルを割り当てますが、これはTrampには必要ではありません。そして、端末があるという事実は、CRが存在する原因になります。私は、Trampに時々CRを抑制するメカニズムがあるのか​​どうかはわかりませんが、最初にそこにいなければ問題はありません。
追加された 著者 CodingWithoutComments,
@Gillesではなく、 .ssh/config ファイルもありません。ドッカーの設定はより有望に聞こえるかもしれませんが、私はどこを見るかわかりません。さらに、Trampはホップのいずれかを別々に実行することができますが、問題が発生した場合にのみパイプを通過します。
追加された 著者 Yann Trevin,
@Gilles -t ビットを削除すると、しばらくTrampがハングアップしてから放棄されます。私はまだ ^ M を見ることができます。最後の行は、 exec docker exec -i 74b79b8b67a2/bin/sh ^ M であり、最後の呼び出しは trampのように見える巨大なバックトレースです-maybe-open-connection(["docker-exec" nil "74b79b8b67a2" "/" ssh:root @ vm | "])
追加された 著者 Yann Trevin,
@MichaelAlbinus私はちょうど docker-tramp ライブラリを試したところ、元々見たのと同じエラーが表示されます: number-or-marker-p、// DIRED-OPTIONS//。また、 -d オプションを使用して docker を実行します。
追加された 著者 Yann Trevin,
@MichaelAlbinus Dockerには、すでに調理された画像でいっぱいのレジストリが付属しています。つまり、 docker run ubuntu を実行すると、グローバルレジストリに接続し、ダウンロードして開始します(ネットワークに応じて5分から1時間かかることもあります)。今晩遅くにレポートを書くつもりです。
追加された 著者 Yann Trevin,
私は自分でそれを試したことはありませんが、ELPAには docker-tramp というパッケージがあります。たぶんあなたはそれを試してみると、あなた自身のものを定義するでしょうか?そして何かを改善しなければならない場合は、そこで行う方が良いでしょう。他の人たちはこれで利益を得るでしょう。
追加された 著者 celtschk,
まあ、私はn00b wrtドッカーです。 Emacs/Trampでこのエラーを引き起こすために誰かが私に小さなドッカーイメージとレシピをどのように使用するのかを教えてもらえれば、私はそれをデバッグしたいと思うでしょう。私はUbuntu 15.10を実行しています。これはスタック交換に適していない通信を必要とするかもしれないので、EmacsやTrampのバグ報告を提出することが非常に重要です。
追加された 著者 celtschk,

答えはありません

0