我在“程序”文件夹中有一个很大的程序列表(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”部分。
或者,您可以使用-S
perl 的命令行选项,让它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 会话,其中包含该会话所需的变量、别名等。