我正在整理一个缺少所需驱动程序的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命令的新手 谢谢!
答案 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)
。