2013-02-14 38 views
0

linux使用bash,
可以说我做了两个程序,都称为print_report
(他们是在不同的目录。)我可以将PATH变量计算到我在哪个目录中吗?

里面我.bashrc文件,我有:

PATH = “路径/到/ print_report1 /:$ PATH”

这让我在任何地方输入print_report,它将运行其中一个程序。


如何我已经庆典决定使用一种或另一种取决于工作目录?

例如,
如果我目前在~/project1/和类型print_report它将使用/bin/foo/print_report
如果我在~/project2/目前我并键入print_report它将使用/bin/bar/print_report

回答

4

你不能这样做因此。相反,写一个包装脚本或函数来检查当前目录,并调用正确的命令:

#!/bin/bash 
if [[ $PWD == $HOME/project1/* ]] 
then 
    /bin/foo/print_report "[email protected]" 
elif [[ $PWD == $HOME/project2/* ]] 
then 
    /bin/bar/print_report "[email protected]" 
else 
    echo "Don't know how to print_report for $PWD" 
fi 
1

这是一个安全灾难即将发生,(这是说你真的不希望这样做)但你肯定可以这样做:(假如把它放在你的.bashrc或者只是在当前shell中定义它)

cd() { 
    dir=${1-.} 
    case $dir in) 
     path1) PATH=/path/for/working/in/path1;; 
     path2) PATH=/path/for/working/in/path2;; 
     *) PATH=/bin:/usr/bin;; 
    esac 
    command cd $dir 
} 

+0

虚拟+1用于指出安全隐患 – chepner 2013-02-14 21:00:00

1

可以效仿preexec hooks点菜的zsh,使用DEBUG陷阱。

这样,每次执行命令时,都可以运行preexec钩子来检查$ PWD,并相应地调整$ PATH。

你可以在你的.bashrc中包含一个你想要的preexec钩子。

0

到目前为止所呈现的一切都让我觉得过于复杂和不必要的复杂hackery。我只想把一个Makefile在每个目录与

report: 
     /bin/foo/print_report 
~/project1/Makefile

,并

report: 
     /bin/bar/print_report 

~/project2/Makefile。这很容易扩展到你想要的目录和程序。而您只需键入make而不是那些冗长的命令名称:-)

相关问题