在RStudio中通过system命令创建运行.sh文件报错问题咨询
故障原因
这一问题的核心是RStudio调用的shell运行环境和系统终端的运行环境不一致:
- 系统终端启动的是交互式登录shell,启动时会自动加载你当前用户的shell配置文件(如
.bashrc、.bash_profile、.zshrc),你配置的conda环境路径、metaphlan2.py的安装路径都被写入了这些配置文件的PATH变量中,所以终端可以正常识别相关命令。 - RStudio的
system()函数调用的是非交互式非登录shell,启动时不会加载上述用户自定义的配置文件,PATH变量仅保留系统默认路径,找不到activate和metaphlan2.py的安装位置,就会抛出命令不存在的报错。
解决方法
- 方法1:在shell脚本中手动加载配置文件
在脚本开头添加对应shell配置的加载语句,或者直接加载conda的初始化脚本,确保环境变量正常生效,修改后的脚本示例:
#!/bin/bash # 替换为你自己的conda安装路径下的conda.sh source ~/miniconda3/etc/profile.d/conda.sh conda activate samtools metaphlan2.py ERR479000_1.fastq.gz,ERR479000_2.fastq.gz --bowtie2out ./temp/ERR479000.bowtie2.bz2 --input_type fastq > ./temp/MetaPhlAn2.txt
如果不确定conda路径,可以在终端执行find ~ -name "conda.sh"查询。
- 方法2:直接使用命令的绝对路径
在终端分别执行which activate和which metaphlan2.py获取两个命令的完整绝对路径,直接替换脚本中的对应命令即可,示例:
#!/bin/bash # 替换为你实际查询到的路径 /opt/miniconda3/bin/activate samtools /opt/miniconda3/envs/samtools/bin/metaphlan2.py ERR479000_1.fastq.gz,ERR479000_2.fastq.gz --bowtie2out ./temp/ERR479000.bowtie2.bz2 --input_type fastq > ./temp/MetaPhlAn2.txt
- 方法3:在R中提前配置环境变量
执行shell脚本前,在R中将所需的工具路径添加到系统PATH变量中:
# 替换为你自己的conda bin目录路径 Sys.setenv(PATH = paste("/opt/miniconda3/bin", Sys.getenv("PATH"), sep = ":")) system('./MetaPhlAn2.sh')
内容的提问来源于stack exchange,提问作者user2300042
相关产品推荐
相关产品推荐

