加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

R中的`Terminal` vs`ystem()`

发布时间:2020-12-15 22:04:07 所属栏目:安全 来源:网络整理
导读:我尝试在R中运行以下命令 system("Message=HelloWoRld;echo $(sed 's/R/r/' (echo ${Message}))") 但它失败了 Message=HelloWoRldecho $(sed 's/R/r/' (echo ${Message})) 复制粘贴在终端时工作正常.这个问题似乎与(..)有关.当我做哪个bash或系统(“哪个bash
我尝试在R中运行以下命令

system("Message=HelloWoRld;echo $(sed 's/R/r/' <(echo ${Message}))")

但它失败了

Message=HelloWoRld
echo $(sed 's/R/r/' <(echo ${Message}))

复制粘贴在终端时工作正常.这个问题似乎与<(..)有关.当我做哪个bash或系统(“哪个bash”)时,我得/ bin / bash. 为什么通过system()或直接在终端窗口上执行相同的命令不会产生相同的输出? 仅供参考,我使用的是Mac OS X 10.11.3. Bash是GNU bash,版本3.2.57(1),R是R版本3.2.3.

解决方法

system不是终端模拟器,它没有运行Bash.你的终端运行Bash.要在系统中获得相同的效果,请在Bash中运行命令.例如.

system('bash -c 'echo $(date)'')

更重要的是,您当前的Bash命令非常复杂,并使用不必要的命令调用;你可以通过更简单的方式实现同??样的目标

sed s/R/r/ <<< $Message

@chepner提出了另一个解决方案可以直接在系统中使用而无需将执行传递给Bash的优点:

system("Message=HelloWoRld; echo $Message | sed 's/R/r/'")

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读