程序从终端运行良好,但不能从shell脚本运行

时间:2014-12-25 13:51:16

标签: linux bash shell

我在Linux Mint上。

我有一个名为samtools的程序,它存储在我桌面上的一个文件夹中。我已将可执行文件的路径添加到$ PATH变量中。换句话说,我的本地〜/ .bashrc文件有一行:

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

名为samtools的可执行文件位于此文件夹中。

因此,当我尝试从命令行启动它时,只需输入" samtools"有用。当我在命令行中键入可执行文件的直接路径时,它也有效。

但是,当我尝试从shell脚本启动它时,它不会启动,并且说没有找到这样的文件或目录。

实际上,我正在尝试使用另一个使用一些shell脚本来预处理某些数据的软件。我得到的错误看起来像这样:

Indexing...
./RD_capture//process_one_capture.sh: 17: ./RD_capture//process_one_capture.sh: samtools: not found
 Sorting...
 ./RD_capture//process_one_capture.sh: 20: ./RD_capture//process_one_capture.sh: samtools: not found
 Piling up...
./RD_capture//process_one_capture.sh: 23: ./RD_capture//process_one_capture.sh: samtools: not found

Shell代码如下所示:

echo "Indexing..."
samtools index $INPUTDIR/$sample.bam
#Then we sort them
echo "Sorting..."
samtools sort $INPUTDIR/$sample.bam $TMPDIR/$sample.sorted
#Finally we pile them up
echo "Piling up..."
samtools mpileup $TMPDIR/$sample.sorted.bam | cut -f 1-4 > $OUTPUT/$(basename $sample .bam).pile

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

看起来Linux无法找到samtools

解决此问题: 在开头声明这一点(使用导致pwd可执行文件的路径更改pwd

export set CURRENT_DIR=`pwd`

并且在调用samtools时使用

$CURRENT_DIR/samtools

注1:当负责从/usr/bin/sh执行shell脚本时,您有责任告诉shell脚本的确切路径。尝试使用命令在控制台上回显路径,如果这没有帮助,如下所示:

echo `pwd`

注2:使用上面的后面引号,它位于键盘的左上角。

注3: export set用于在shell脚本中存储全局变量,以便在此命令之后出现的命令可以使用此变量并在需要时更新它。