在组织模式下使用 tramp :session 的奇怪结果
Strange results using tramp :session in org-mode
TLTR;如果你在 Windows 上使用 Emacs Org-Mode Tramp 和带有 SSH 会话的 Plink。它会产生奇怪的输出
长文本:
我使用 Emacs 组织模式。这是一个很棒的工具。我喜欢以一种有文化的 DevOps 方式使用。这也是一个好主意,记录您的工作。
你会讨厌我的,我得用一个Windows站@work。所以我用 Putty plink 测试了它:
#+NAME: harddisk_worker001.sh
#+BEGIN_SRC sh :dir /plink:worker001:/tmp
df --human-readable --local --exclude-type=tmpfs --exclude-type=overlay | awk '{print "\t" }' | (read -r; printf "%s\n" "$REPLY"; sort --reverse)
#+END_SRC
#+RESULTS: harddisk_worker001.sh
| Use% | Filesystem |
| 73% | /dev/mapper/system-lvroot |
| 6% | /dev/mapper/system-lvopt |
| 6% | /dev/mapper/system-lvhome |
| 47% | /dev/sda1 |
| 2% | /dev/mapper/system-lvtmp |
| 27% | /dev/mapper/system-lvvar |
| 0% | devtmpfs |
结果很好,但我也喜欢它的 :session 功能,以加快速度:
#+NAME: harddisk_worker001.sh
#+BEGIN_SRC sh :dir /plink:worker001:/tmp :session worker001
df --human-readable --local --exclude-type=tmpfs --exclude-type=overlay | awk '{print "\t" }' | (read -r; printf "%s\n" "$REPLY"; sort --reverse)
#+END_SRC
#+RESULTS: harddisk_worker001.sh
| Filesystem |
| /dev/mapper/system-lvroot |
| /dev/mapper/system-lvopt |
| /dev/mapper/system-lvhome |
| /dev/sda1 |
| /dev/mapper/system-lvtmp |
| /dev/mapper/system-lvvar |
| devtmpfs |
这不是预期的结果!你能解释为什么 table 不同吗?我无法看到这的根本原因。除了 tramp-plink 实现中的错误,但我不确定。
你能重放这个吗?
我不太了解 org,所以我调试了生成的 Tramp 调用。您的第一个命令导致 org-babel--shell-command-on-region
,它会调用适当的 process-file
调用。
你的第二个例子,使用 :session
参数,似乎没有调用任何与进程相关的 TRAMP 操作。所以我相信 org 正在内部尝试一些我无法进一步调试的东西。也许是 Tramp 不了解的进程调用,谁知道呢。
我建议写一份组织故障报告。
TLTR;如果你在 Windows 上使用 Emacs Org-Mode Tramp 和带有 SSH 会话的 Plink。它会产生奇怪的输出
长文本: 我使用 Emacs 组织模式。这是一个很棒的工具。我喜欢以一种有文化的 DevOps 方式使用。这也是一个好主意,记录您的工作。
你会讨厌我的,我得用一个Windows站@work。所以我用 Putty plink 测试了它:
#+NAME: harddisk_worker001.sh
#+BEGIN_SRC sh :dir /plink:worker001:/tmp
df --human-readable --local --exclude-type=tmpfs --exclude-type=overlay | awk '{print "\t" }' | (read -r; printf "%s\n" "$REPLY"; sort --reverse)
#+END_SRC
#+RESULTS: harddisk_worker001.sh
| Use% | Filesystem |
| 73% | /dev/mapper/system-lvroot |
| 6% | /dev/mapper/system-lvopt |
| 6% | /dev/mapper/system-lvhome |
| 47% | /dev/sda1 |
| 2% | /dev/mapper/system-lvtmp |
| 27% | /dev/mapper/system-lvvar |
| 0% | devtmpfs |
结果很好,但我也喜欢它的 :session 功能,以加快速度:
#+NAME: harddisk_worker001.sh
#+BEGIN_SRC sh :dir /plink:worker001:/tmp :session worker001
df --human-readable --local --exclude-type=tmpfs --exclude-type=overlay | awk '{print "\t" }' | (read -r; printf "%s\n" "$REPLY"; sort --reverse)
#+END_SRC
#+RESULTS: harddisk_worker001.sh
| Filesystem |
| /dev/mapper/system-lvroot |
| /dev/mapper/system-lvopt |
| /dev/mapper/system-lvhome |
| /dev/sda1 |
| /dev/mapper/system-lvtmp |
| /dev/mapper/system-lvvar |
| devtmpfs |
这不是预期的结果!你能解释为什么 table 不同吗?我无法看到这的根本原因。除了 tramp-plink 实现中的错误,但我不确定。
你能重放这个吗?
我不太了解 org,所以我调试了生成的 Tramp 调用。您的第一个命令导致 org-babel--shell-command-on-region
,它会调用适当的 process-file
调用。
你的第二个例子,使用 :session
参数,似乎没有调用任何与进程相关的 TRAMP 操作。所以我相信 org 正在内部尝试一些我无法进一步调试的东西。也许是 Tramp 不了解的进程调用,谁知道呢。
我建议写一份组织故障报告。