为一堆程序添加路径

为一堆程序添加路径

我在“程序”文件夹中有一个很大的程序列表(samtools、annovar、bra、bedtools 等)。

我已经阅读了很多有关导出路径的帖子,因此我不需要从工作文件夹中识别程序的整个路径。然而,它仍然不起作用,我想是因为我正在混合所有东西。

文件夹variant_effect_predictor中有一个perl脚本,我想从另一个文件夹中评估该脚本,而无需输入该脚本的完整路径。

我正在 OS X 上工作。我添加了~/.profile以下内容:

export PATH=/Users/pics/Desktop/MyDocuments/Programms/ensembl-tools-release-78/scripts/variant_effect_predictor:$PATH

它以某种方式告诉我:

pik:Annotation pic$ perl variant_effect_predictor.pl -custom C0066PH1.H3K4me1.ppqt_macs2_broad_v2.20130819.bed.gz,BED_annotation,BED,overlap,1 -i SNPs_vep_input.txt --cache --force_overwrite --symbol 
Can't open perl script "variant_effect_predictor.pl": No such file or directory

因此,路径未导出或添加。我该如何修复它?

答案1

当您运行它时,perl variant_effect_predictor.pl您会告诉perl可执行文件调用的脚本variant_effect_predictor.pl位于当前目录中并运行它。

如果它是可执行的 ( chmod +x /Users/pics/Desktop/MyDocuments/Programms/ensembl-tools-release-78/scripts/variant_effect_predictor/variant_effect_predictor.pl) 并且脚本内部以 shebang (“ #!/usr/bin/perl”或第一行的类似内容)开头,您应该能够将该perl部分保留在命令的开头,然后将导致bash搜索$PATH您想要的内容重新想要。

答案2

正如 Braatchley 已经写过的,如果你的 perl 脚本是可执行的并且有正确的 shebang 行,你可以省略命令中的“perl”部分。

或者,您可以使用-Sperl 的命令行选项,让它variant_effect_predictor.pl在您的 PATH 中搜索:

-S

让 Perl 使用 PATH 环境变量来搜索程序,除非程序名称包含路径分隔符。

因此,你的命令行将像这样开始:

perl -S variant_effect_predictor.pl -custom C0066PH1.H3...  

答案3

要正确设置您的环境,您应该使用 .bashrc 而不是 .profile

如果您有一个 .bashrc 文件(现在大多数现代发行版默认使用 .bashrc),很可能 .profile 文件中有一个 IF 语句,它将检查 .bashrc 文件是否存在,并且不会处理 .profile 文件找到 .bashrc 文件后继续执行。

带有“检查 .bashrc”IF 语句的典型 .profile 文件的内容

从 .profile 文件中截取...

# if running bash
if [ -n "$BASH_VERSION" ]; then
  # include .bashrc if it exists
  if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
  fi
fi 

在 .bashrc 文件中添加此行以向 PATH 变量添加其他条目

$ PATH="$PATH:user_path_1:user_path_2:user_path_3"

$PATH 将保留现有路径变量,并且要添加其他路径,只需在每个附加路径之前使用冒号 [:] 即可。

或者,您可以使用多个 .bashrc 文件来适应您需要的任何环境设置。只需创建一个文件并用另一个名称 .bash_other_rc 命名它,然后从命令行调用它,如下所示......

$ bash -f .bash_other_rc

这将启动一个 bash 会话,其中包含该会话所需的变量、别名等。

相关内容