bash脚本执行报错samtools: command not found的解决求助
解决办法
下面按推荐程度给出三种可行方案:
方案1:直接使用实际命令名(最推荐)
把脚本里的samtools替换成别名对应的实际命令samtools_0.1.18,修改后脚本如下:
#!/bin/bash # some # code samtools_0.1.18 view -bS input.sam out.bam
这种方式无需额外配置,避开别名相关的限制,稳定性最高。
方案2:在脚本中开启别名扩展
bash在非交互式模式(运行脚本时默认是该模式)下不会自动解析别名,所以需要先开启别名扩展选项,再定义别名。修改脚本:
#!/bin/bash # 开启别名扩展功能 shopt -s expand_aliases # 定义samtools别名 alias samtools='samtools_0.1.18' # some # code samtools view -bS input.sam out.bam
方案3:将samtools路径加入环境变量
先在终端执行which samtools_0.1.18,得到该命令的绝对路径(示例:/opt/samtools-0.1.18/bin/samtools_0.1.18),然后把命令所在目录添加到脚本的PATH中:
#!/bin/bash # 添加samtools所在目录到环境变量PATH export PATH=$PATH:/opt/samtools-0.1.18/bin # 直接使用实际命令执行操作 samtools_0.1.18 view -bS input.sam out.bam
为什么之前加别名没生效?
bash运行脚本时属于非交互式shell,默认关闭了别名扩展功能,即便你在脚本里定义了别名,也不会被解析为实际命令。必须通过shopt -s expand_aliases手动开启该功能才能让别名生效。
内容的提问来源于stack exchange,提问作者MeghanT
相关产品推荐
相关产品推荐

