Org-Babel 代码可以转换为 Elisp 吗?



我有一个org-babel源代码,它通过tramp访问服务器并在那里运行shell脚本。是否可以将此源块转换为 Elisp 函数?

#+BEGIN_SRC sh :dir "/pscp:putty-connection-xy:/dir-yz" 
expect -c '
spawn bash -c  "scp file-to-copy user@server:/home1/dir-xy"
expect {
    "(yes/no)?" {
        send "yesr"
        expect "*?assword:*"
        send "secretPassWordr"
    }
    "*?assword:*" {
        send "secretPassWordr"
    }
}
expect eof
'
#+END_SRC

使用 Tramp 的多跳(未经测试(:

(copy-file "/plink:putty-connection-xy:/dir-yz/file-to-copy"
           "/plink:putty-connection-xy|ssh:user@server:/home1/dir-xy/")

这使用plinkssh,'tho。如果可以直接从本地计算机连接user@server,则可以使用以下pscp缩短此时间:

(copy-file "/pscp:putty-connection-xy:/dir-yz/file-to-copy"
           "/pscp:user@server:/home1/dir-xy/")

解决方案很简单。我打电话给块并交出它'sh',块的代码和参数。它有效

(org-babel-execute-src-block nil 
'("sh" 
   "cd /home1/
    expect -c '    
spawn bash -c "scp file-to-copy user@server:/home1/dir-xy ."
     expect { 
             "*?assword:*" {           
   send "secretPassWord\r"        }    }   
   expect eof'
   " 
  ((:colname-names) (:rowname-names) 
   (:result-params "raw" "replace") 
   (:result-type . value) (:results . "silent") 
   (:exports . "code") 
   (:tangle . "no") (:hlines . "no") (:noweb . "no") 
   (:cache . "no") (:session . "none")) "" nil nil ))

最新更新