0

linuxを使用してbash、両方とも と呼ばれる2
つのプログラムを作成したとしprint_reportます。
(それらは異なるディレクトリにあります。)

.bashrcファイル 内には、次のものがあります。

PATH="path/to/print_report1/:$PATH"

これにより、print_reportどこにでも入力でき、プログラムの 1 つが実行されます。


作業ディレクトリに応じて、bash でどちらを使用するかを決定するにはどうすればよいですか?

たとえば、
I'm currently in~/project1/でタイプprint_reportすると、使用されます/bin/foo/print_report
I'm currently in~/project2/でタイプprint_reportすると、使用されます/bin/bar/print_report

4

4 に答える 4

4

そんなことはできません。代わりに、現在のディレクトリをチェックして適切なコマンドを呼び出すラッパー スクリプトまたは関数を記述します。

#!/bin/bash
if [[ $PWD == $HOME/project1/* ]]
then
    /bin/foo/print_report "$@"
elif [[ $PWD == $HOME/project2/* ]] 
then
    /bin/bar/print_report "$@"
else
    echo "Don't know how to print_report for $PWD"
fi
于 2013-02-14T20:25:05.350 に答える
1

これは起こるのを待っているセキュリティ災害です (つまり、あなたは本当にこれをしたくないということです) が、確かに次のようなことをすることができます:

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
}

(それを .bashrc に入れるか、現在のシェルで定義するだけです。)

于 2013-02-14T20:25:13.133 に答える
1

DEBUG トラップを使用して、zsh風にpreexec フックをエミュレートできます。

このようにして、コマンドが実行されるたびに preexec フックを実行して $PWD をチェックし、それに応じて $PATH を調整できます。

.bashrc で必要なことを行う preexec フックを含めることができます。

于 2013-02-14T20:25:59.990 に答える
0

これまでに紹介したものはすべて、過度に複雑で不必要に複雑なハッカーに思えます。Makefile各ディレクトリに配置するだけです

report:
        /bin/foo/print_report

~/project1/Makefileおよび

report:
        /bin/bar/print_report

~/project2/Makefile。これは、必要な数のディレクトリとプログラムに簡単に拡張できます。そして、それらの長いコマンド名の代わりに入力するだけでmake済みます:-)

于 2013-02-15T18:03:48.323 に答える