기존 명령의 래퍼이고 모든 원래 플래그를 허용하는 새 명령을 정의하는 방법은 무엇입니까?

기존 명령의 래퍼이고 모든 원래 플래그를 허용하는 새 명령을 정의하는 방법은 무엇입니까?

내가 원하는 것은 명령이 성공할 경우 관련 정보를 인쇄하는 명령을 만드는 것입니다. 예를 들어 별칭을 다음과 같이 정의하면

alias cd='cd /path/to/destination/  &&  echo "changing directory to echo $(pwd)"'

그런 다음 실행하면 cd터미널이 인쇄됩니다 changing directory to /path/to/destination/. 하지만 이 솔루션을 사용하면 command 에 정의된 플래그를 사용할 수 없습니다 cd. 위와 유사하게 동작하지만 기본 명령에 대해 원래 정의된 모든 플래그를 허용하는 명령을 정의하고 싶습니다. , mkdir및 에 대해 이 작업을 수행할 계획입니다 .cprm

답변1

스크립트나 함수로 래핑하세요 ~/.bash_profile.

예를 들면 다음과 같습니다 mycmd.sh.

#! /bin/bash

your "$1"
commands "$1"
shift
the_original_command "$@"

기능:

mycmd() {
    your "$1"
    commands "$1"
    shift
    the_original_command "$@"
}

다음과 같은 여러 매개변수를 사용해야 하는 경우

your "$1"
commands "$2"

shift 2, 3, 4, 5 등을 사용합니다 .

따라서 다음과 같습니다.

your "$1"
commands "$2"
shift 2
the_original_command "$@"

답변2

Bash 구성 파일( ~/.bashrc)에 다음 명령을 추가한 후 셸을 다시 시작할 수 있습니다.

function cd_echo() {
    cd "${@}";
    echo "Changing directory to $(pwd)";
}

alias cd="cd_echo";

시험 결과:

$ cd /home
Changing directory to /home

$ cd -P /dev
Changing directory to /dev

관련 정보