동적 위치 기반 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

쉘 기능이 더 나은 서비스를 제공할 것입니다:

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'

관련 정보