基于位置的动态 bash 别名

基于位置的动态 bash 别名

我有以下文件夹结构:

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

和命令

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

我想创建一个别名,doit根据我所在的父文件夹执行相应的文件。

例如:

  1. 如果我在内部alpha或其中一个子目录中,当我使用时:

    doit --addsource extra

实际运行:

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

  1. 如果我在内部beta或其中一个子目录中,当我使用时:

    doit --addsource inner

实际运行:

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

答案1

shell 函数会更好地为您服务:

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 "$@"
}

这会将变量设置dir为 string alphabeta或者gamma取决于当前工作目录,或者如果当前目录位于其他位置,则抱怨您位于错误的目录树中。

然后,它运行 Python 脚本,利用该$dir值和--clean选项,并添加您传递给该函数的任何其他参数。

您可以将此 shell 函数的定义添加到通常添加别名的位置。

答案2

您可以像下面这样简单地使用它:

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

相关内容