如何从 R 中 运行 多命令 Linux shell 脚本?
How to run a multi command Linux shell script from within R?
我正在启动一个缺少所需驱动程序的 linux 虚拟环境,因此我使用 shell 进行安装。我正在手动执行此操作,但想从 R 中自动执行此操作,我的其余代码所在的位置。
我可以通过单击“工具”>Shell...
在 R 中打开 shell
然后我有多行 Bash 脚本到 运行 以安装 "ODBC Driver 17 for SQL Server"
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 到 运行 单行的帖子,但我无法找到关于 if/how 的信息,这可以扩展为 运行 多行或如何从某种保存的文件中提取这些命令。
上下文:我是 linux 和 Bash/Shell 命令的新手
谢谢!
您可以使用 ;
分隔命令,并将整个脚本存储为单个字符串。如果您的脚本中有特殊字符(您目前没有),您将必须非常小心正确使用转义字符。
对于你的 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
)。
实际上多行命令工作得很好:
command <- "cd
pwd
ls"
system(command)
MS 提供的命令的问题是(不必要的)使用 su
。您可以重写命令以仅在必要时使用提升的权限:
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)
例如 here sudo tee
。
我正在启动一个缺少所需驱动程序的 linux 虚拟环境,因此我使用 shell 进行安装。我正在手动执行此操作,但想从 R 中自动执行此操作,我的其余代码所在的位置。
我可以通过单击“工具”>Shell...
在 R 中打开 shell然后我有多行 Bash 脚本到 运行 以安装 "ODBC Driver 17 for SQL Server"
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 到 运行 单行的帖子,但我无法找到关于 if/how 的信息,这可以扩展为 运行 多行或如何从某种保存的文件中提取这些命令。
上下文:我是 linux 和 Bash/Shell 命令的新手 谢谢!
您可以使用 ;
分隔命令,并将整个脚本存储为单个字符串。如果您的脚本中有特殊字符(您目前没有),您将必须非常小心正确使用转义字符。
对于你的 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
)。
实际上多行命令工作得很好:
command <- "cd
pwd
ls"
system(command)
MS 提供的命令的问题是(不必要的)使用 su
。您可以重写命令以仅在必要时使用提升的权限:
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)
例如 here sudo tee
。