基于位置的动态 bash 别名

use*_*631 3 bash shell-script

我有以下文件夹结构:

  alpha
    src
       doit.py
   beta
    src
       doit.py
   gama
    src
       doit.py
Run Code Online (Sandbox Code Playgroud)

和命令

python ../../doit.py --clean --add_source inner
Run Code Online (Sandbox Code Playgroud)

我想创建一个别名, 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
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 6

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 "$@"
}
Run Code Online (Sandbox Code Playgroud)

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

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

您可以将这个 shell 函数的定义添加到您通常添加别名的任何地方。