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

时间:2016-08-25 16:26:46

标签: r bash macos

我尝试在R

中运行以下内容
system("Message=HelloWoRld;echo $(sed 's/R/r/' <(echo ${Message}))")

但它失败了,而

Message=HelloWoRld
echo $(sed 's/R/r/' <(echo ${Message}))
复制粘贴在终端时,

工作正常。该问题似乎与<(..)有关。当我执行which bashsystem("which bash")时,我会获得/bin/bash

为什么通过system()或直接在终端窗口上执行的相同命令不会产生相同的输出?

仅供参考,我在Mac OS X 10.11.3。 Bash为GNU bash, version 3.2.57(1),R为R version 3.2.3

1 个答案:

答案 0 :(得分:8)

system不是终端模拟器,它没有运行Bash。你的终端运行Bash。要使用system('bash -c \'echo $(date)\'') 获得相同的效果,请在Bash中运行命令。 E.g。

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

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

system

@chepner非常重视另一个解决方案可以直接在system("Message=HelloWoRld; echo $Message | sed 's/R/r/'") 中使用而无需将执行传递给Bash:

{{1}}