我下载了一些软件(名为samtools
),它存储在我桌面上的一个文件夹中。然后我将可执行文件的路径添加到PATH
环境变量中。换句话说,我的~/.bashrc
文件有以下行:
export PATH="~/Desktop/samtools/samtools-1.1:$PATH".
名为的可执行文件samtools
就在此文件夹中。
当我尝试通过简单地输入从命令行启动它时samtools
,它可以工作。当我使用可执行文件的完整路径时,它也可以工作。
但是,当我尝试从 shell 脚本启动它时,它无法启动并报告:
No such file
或Directory 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