動的位置ベースの bash エイリアス

動的位置ベースの bash エイリアス

次のフォルダ構造があります。

  alpha
    src
       doit.py
   beta
    src
       doit.py
   gama
    src
       doit.py

そして命令を出す

python ../../doit.py --clean --add_source inner

doit私が持っている親フォルダに基づいて適切なファイルを実行するエイリアスを作成したいと思います。

たとえば、

  1. 私が内部にあるalphaか、サブディレクトリの1つにある場合は、次のようにします。

    doit --addsource extra

実際の操作:

python /home/alpha/src/doit.py --clean --addsource extra

  1. 私が内部にあるbetaか、サブディレクトリの1つにある場合は、次のようにします。

    doit --addsource inner

実際の操作:

python /home/beta/src/doit.py --clean --addsource  inner

答え1

シェル機能はより良いサービスを提供します:

doit () {
    local dir

    case $PWD/ in
        /home/alpha/*) dir=alpha ;;
        /home/beta/*)  dir=beta  ;;
        /home/gamma/*) dir=gamma ;;
        *) echo 'Not standing in the correct directory' >&2
           return 1
    esac

    python "/home/$dir/src/doit.py" --clean "$@"
}

これは、現在の作業ディレクトリに応じて変数をdirstringに設定するかalpha、現在のディレクトリが別の場所にある場合は無効なディレクトリツリーにあると文句を言います。betagamma

次に、Pythonスクリプトを実行してその$dir値と--cleanオプションを取り、関数に渡した別の引数を追加します。

通常、エイリアスを追加する場所にこのシェル関数の定義を追加できます。

答え2

次のように簡単に使用できます。

alias doit='doit=$(pwd)/src/doit.py;$doit --clean'

関連情報