`R中的终端`vs`system()`

`R中的终端`vs`system()`,r,bash,macos,R,Bash,Macos,我试着在R中运行以下命令 system("Message=HelloWoRld;echo $(sed 's/R/r/' <(echo ${Message}))") system(“Message=HelloWoRld;echo$(sed's/R/R/”system不是终端仿真器,也没有运行Bash。您的终端运行Bash。要获得与system相同的效果,请在Bash内运行命令。例如 system('bash -c \'echo $(date)\'') 此外,您当前的Bash命令非常复杂,

我试着在R中运行以下命令

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

system(“Message=HelloWoRld;echo$(sed's/R/R/”
system
不是终端仿真器,也没有运行Bash。您的终端运行Bash。要获得与
system
相同的效果,请在Bash内运行命令。例如

system('bash -c \'echo $(date)\'')
此外,您当前的Bash命令非常复杂,并且使用了不必要的命令调用;您可以通过更简单的

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

实际上,下面的代码可以在系统中运行('bash-c'Message=HelloWoRld;echo$(sed“s/R/R/"@Remi.b这取决于您的系统,有关详细信息,请参阅
系统
文档。在Mac上,该命令可能通过
/bin/sh
运行,但我不会将其作为一般规则。特别是,根据设计,这在Windows上永远不起作用。所有符合POSIX的系统都使用
/bin/sh
作为默认外壳;实际l用于实现
/bin/sh
的shell通常是不相关的,只要shell以符合POSIX的方式执行其输入即可。没有意识到您在另一个环境中包装上一个Q的位置。请尝试管道,而不是进程子系统,即
系统(“Message=HelloWoRld;echo$(echo${Message}sed's/R/R/”)
。祝你好运。外部的
echo
是冗余的;
系统(“Message=HelloWoRld;echo$Message | sed's/R/R/”)
@shellter将与OP的当前代码有相同的问题(即它也不会工作-取决于外壳)事实上,这两种解决方案都是非常间接的。更直接的是
sed s/R/R/@KonradRudolph
。使用管道并不比将命令包装在字符串中以传递给另一个shell执行更间接。
sed s/R/r/ <<< $Message
system("Message=HelloWoRld; echo $Message | sed 's/R/r/'")