如何在R中运行多命令Linux Shell脚本?

时间:2018-06-25 18:12:53

标签: r linux bash shell driver

我正在整理一个缺少所需驱动程序的linux虚拟环境,因此我正在使用shell进行安装。我正在手动执行此操作,但想从我其余代码所在的R内部自动执行此操作。

我可以通过单击工具> Shell ...来打开R中的Shell ...

然后我需要运行多行Bash脚本,以便安装“用于SQL Server的ODBC驱动程序17”

sudo su 
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/debian/8/prod.list > /etc/apt/sources.list.d/mssql-release.list

exit
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install msodbcsql17

我想将这些命令保存在某种可读文件中,然后在R中运行。

经过一些搜索,我看到了使用System来运行一行的帖子,但是我无法找到有关是否/如何扩展为运行多行或如何从中提取这些命令的信息。某种保存的文件。

上下文:我是linux和Bash / Shell命令的新手 谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用;分隔命令,并将整个脚本存储为单个字符串。如果您的脚本中有特殊字符(当前尚不存在),则必须非常小心正确使用转义字符。

对于您的bash脚本,这样的事情应该可以工作

command="sudo su ; 
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -; 
curl https://packages.microsoft.com/config/debian/8/prod.list > /etc/apt/sources.list.d/mssql-release.list; 
exit;
sudo apt-get update;
sudo ACCEPT_EULA=Y apt-get install msodbcsql17;"

system(command)

另一种解决方法是将脚本另存为.sh bash脚本,然后仅在command()中调用脚本文件名。请注意,要使bash脚本可从命令行执行,必须在最顶部添加she-bang行(#!/bin/bash)。

答案 1 :(得分:1)

实际上多行命令可以正常工作:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Gradually change the opacity of the p element</button>

<div class="container">
  <div id="pict4">PIC 4</div>
  <div id="pict3">PIC 3</div>
  <div id="pict2">PIC 2</div>
  <div id="pict1">PIC 1</div>
</div>

MS提供的命令的问题是command <- "cd pwd ls" system(command) 的使用(不必要)。您可以重写命令以仅在必要时使用提升的特权:

su

例如,ASCII table代表command="curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - curl https://packages.microsoft.com/config/debian/8/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list sudo apt-get update sudo ACCEPT_EULA=Y apt-get install msodbcsql17" system(command)