我有两个目录:src
和projects
.我想阻止自己跑步,git ...
除非我特别在里面src
或projects
。这可能吗?
答案1
阻止二进制文件运行很困难,但对于典型情况,存在一种简单的保护方法:
- 您定义一个覆盖该名称的 shell 函数。这显然在另一个(也是另一个用户的)shell 中不起作用。
- 您将二进制文件从 $PATH 中取出并用包装器脚本替换它。这更安全,但显然会导致软件更新问题(脚本被覆盖)。
shell 函数可能如下所示:
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
例子: