【问题标题】:Calling ssh with system in R shell eats subsequent commands在 R shell 中使用系统调用 ssh 会吃掉后续命令
【发布时间】:2015-05-04 11:40:00
【问题描述】:

我的工作流程是通过 ESS 包将命令从 emacs 缓冲区发送到 emacs 中的 R 会话。

a=0;
system("ssh remotehost ls")
a = a+1;

当我快速连续运行上述三行时(即提交到R缓冲区),最后a的值为0。当我慢速运行时,a为1。

我只遇到过通过系统运行 ssh 命令的问题。在所有其他情况下,命令会排队并按顺序运行。

我的同事在他们的 R/vim 设置中遇到了完全相同的问题。但我们在 RStudio 中没有同样的问题。

这里的任何建议都会很棒。

【问题讨论】:

  • 你的编程问题是?
  • 呃 - 抱歉 - 留言板错误?
  • 有点。 system() 也是一个杂牌。您可能想要运行命令管道并等待完成;另见help(system)
  • 我读了help(system),这很有趣,虽然没有给我任何想法。 system2 做同样的事情。分号分隔命令有效,这可能是我的方法。

标签: r vim emacs ess vim-r


【解决方案1】:

sshsystem() 命令期间吃掉任何stdin。如果您逐行粘贴,则ssh 在您提交a=a+1 之前终止,因此它被传递给R 而不是ssh。如果您不希望终端输入被子进程吃掉,请使用 system("ssh .. < /dev/null")system(..., input="")

【讨论】:

    猜你喜欢
    • 2015-01-01
    • 2013-04-04
    • 2013-01-06
    • 2015-01-02
    • 1970-01-01
    • 2011-06-06
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多