특정 명령을 실행한 후 명령/스크립트를 어떻게 실행합니까?

특정 명령을 실행한 후 명령/스크립트를 어떻게 실행합니까?

flatpak 패키지를 실행하기 위한 별칭을 생성하는 작은 스크립트가 있습니다(플랫팩을 명령줄에서 어떻게든 사용할 수 있도록 하기 위해). 이 명령을 수동으로 실행하면 모든 것이 잘 작동합니다.

하지만 flatpak을 설치/업데이트/제거할 때마다 이 명령을 수동으로 실행하고 싶지는 않지만 flatpak 명령이 호출될 때마다 스크립트를 자동으로 실행하고 싶습니다.

그래서 좀 더 효율적으로 표현하려면 flatpak *명령어를 flatpak * && ~/my_script.sh.

보너스: 스크립트가 호출될 때만 스크립트가 호출되고 flatpak install스크립트 가 호출될 때는 호출 flatpak remove되지 않도록 이 함수를 제한하려면 어떻게 해야 합니까?flatpak list

누구든지 이것을 달성하는 방법을 알고 있습니까?

답변1

하나를 생성하여 alias다음 항목에 추가 할 수 있습니다 .bashrc.

alias flatpak='flatpak_(){ flatpak "$@" && ~/my_script.sh; }; flatpak_'

my_script첫 번째 인수가 다음인 경우 에만 install실행됩니다 remove.

alias flatpak='flatpak_(){ flatpak "$@" && [[ "$1" = install || "$1" = remove ]] && ~/my_script.sh; }; flatpak_'

답변2

다음에서 래퍼 함수를 ​​정의합니다 .zshrc.

flatpak () {
  command flatpak "$@" && ~/my_script.sh
}

내장 기능은 함수를 재귀적으로 호출하는 대신 (에 있는 ) command이름의 외부 명령을 호출하도록 쉘에 지시합니다 . 에 전달된 인수 목록으로 대체됩니다 .flatpak$PATH"$@"flatpak

이는 모든 sh 유사 쉘(dash, bash, ksh, zsh 등)에서 작동합니다(기능에 액세스할 수 있도록 준비한 경우). 함수는 스크립트에 정의되지 않습니다. 스크립트에서 래퍼를 사용하려면 스크립트 상단 근처에 함수를 정의하거나 where $PATHtrue 앞에 오는 별도의 스크립트에 래퍼를 배치해야 합니다. 네 flatpak, 보세요간단한 래퍼 스크립트는 100개의 bash 프로세스를 생성합니다..

특정 명령 후에만 스크립트를 실행하고 이전과 같이 성공할 때만 스크립트를 실행하십시오.

flatpak () {
  command flatpak "$@" &&
  case $1 in
    install|remove) ~/my_script.sh;;
  esac
}

관련 정보