我有一个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/")
这使用plink
和ssh
,'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 ))