更新

更新

我下载了一些软件(名为samtools),它存储在我桌面上的一个文件夹中。然后我将可执行文件的路径添加到PATH环境变量中。换句话说,我的~/.bashrc文件有以下行:

export PATH="~/Desktop/samtools/samtools-1.1:$PATH".

名为的可执行文件samtools就在此文件夹中。

当我尝试通过简单地输入从命令行启动它时samtools,它可以工作。当我使用可执行文件的完整路径时,它也可以工作。

但是,当我尝试从 shell 脚本启动它时,它无法启动并报告: No such fileDirectory not found

谁能帮我解决这个问题?

编辑:正如一些人所要求的。

确切的错误信息是:

Realigning using Bowtie2...
./RP_capture//realign/filter_long_inserts.sh: 29: ./RP_capture//realign/filter_long_inserts.sh: samtools: not found
./RP_capture//realign/filter_long_inserts.sh: 29: ./RP_capture//realign/filter_long_inserts.sh: samtools: not found
Could not locate a Bowtie index corresponding to basename "./aux/chr1.fa"

我还将其添加echo $PATH到我的脚本中,输出似乎正确。samtools 的路径就在那里。

这是脚本中对 samtools 的众多调用之一的示例。

samtools index $OUTPUT/realignments/$file.abnormal.realign.bowtie.bam

我实际上已经设法使用解决了这个问题

export set SAMTOOLS_DIR="/home/laba/Desktop/samtools/samtools-1.1"

在脚本中,然后像这样调用 samtools:

$SAMTOOLS_DIR/samtools [parameters]

奇怪的是,另一个二进制脚本调用只需明确提供可执行文件的路径即可。无需使用set

答案1

像这样设置目录变量:

export set SAMTOOLS_DIR="/home/laba/Desktop/samtools/samtools-1.1"

然后像这样从脚本中调用可执行文件:

$SAMTOOLS_DIR/samtools [parameters]

解决了问题

答案2

尝试在脚本中放置一个 echo $ PATH,以确保路径符合您的预期,并确保脚本本身可以运行(可执行位设置、正确的 shebang #!/bin/sh 或第一行中的任何内容)。如果其他方法均无效,您可以尝试跟踪脚本调用。

更新

从错误消息中可以清楚地看出,问题出现在子脚本中,该脚本samtools自行调用:

./RP_capture//realign/filter_long_inserts.sh 第 29 行

所以问题是的调用samtools,其中缺少PATH或其他变量组件。

正如您所发现的,该组件很有可能是SAMTOOLS_DIR

另一个值得调查的可能性是问题出在用户运行脚本(例如通过sudo或类似方式)。在这种情况下,将的值PATH设置为“~/Desktop...”,其中“~”表示“当前用户“,最终会对你和运行脚本的用户产生两种不同的含义。在这种情况下,你应该将 PATH 设置为

/home/laba/Desktop/samtools/samtools-1.1:$PATH

代替

~/桌面/samtools/samtools-1.1:$PATH

相关内容