두 개의 디렉토리가 있습니다: src
및 . 특별히 또는 내부에 있지 않는 한 projects
실행되지 않도록 하고 싶습니다 . 가능합니까?git ...
src
projects
답변1
바이너리 실행을 방지하는 것은 어렵지만 일반적인 경우에는 간단한 보호 방법이 있습니다.
- 이 이름을 대체하는 쉘 함수를 정의합니다. 이것은 분명히 다른(또한 다른 사용자의) 쉘에서는 작동하지 않습니다.
- $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
예: