특정 명령이 디렉터리에서 실행되는 것을 제한할 수 있습니까?

특정 명령이 디렉터리에서 실행되는 것을 제한할 수 있습니까?

두 개의 디렉토리가 있습니다: src및 . 특별히 또는 내부에 있지 않는 한 projects실행되지 않도록 하고 싶습니다 . 가능합니까?git ...srcprojects

답변1

바이너리 실행을 방지하는 것은 어렵지만 일반적인 경우에는 간단한 보호 방법이 있습니다.

  1. 이 이름을 대체하는 쉘 함수를 정의합니다. 이것은 분명히 다른(또한 다른 사용자의) 쉘에서는 작동하지 않습니다.
  2. $PATH에서 바이너리를 꺼내 래퍼 스크립트로 바꿉니다. 이는 더 안전하지만 분명히 소프트웨어 업데이트에 문제를 일으킬 것입니다(스크립트 덮어쓰기).

쉘 함수는 다음과 같습니다:

git () {
  local cwd="$(pwd -P)"
  if ! [ "/path/to/src" = "$cwd" -o "/path/to/projects" = "$cwd" ]; then
    echo "The current working directory is: '${cwd}'"
    echo "git must not be run from here; from src and projects only."
    echo "Aborting."
  else
    command git "$@"
  fi
}

답변2

특이한 예: 사용된 경우 zsh영역 강조 표시를 사용하여 단어를 굵은 빨간색으로 표시할 수 있습니다 git(사용된 단어가 $PWD원하는 위치에 없는 경우). 좋다:

self-insert() {
  zle .$WIDGET
  if [[ $BUFFER = git(| *) && $PWD != */src && $PWD != */projects ]]; then
    region_highlight=("0 3 fg=red,bold,standout")
  else
    region_highlight=()
  fi
}
zle -N self-insert

이렇게 하면 방해가 되지 않고 잠재적인 문제에 대해 알 수 있습니다.

git선의 아무 곳이나 표시하려면 :

self-insert() {
  zle .$WIDGET
  if [[ $BUFFER =~ '\<git\>' && $PWD != */src && $PWD != */projects ]]; then
    region_highlight=("$((MBEGIN-1)) $MEND fg=red,bold,standout")
  else
    region_highlight=()
  fi
}
zle -N self-insert

예:

예

관련 정보