是否可以限制某些命令在目录中运行?

是否可以限制某些命令在目录中运行?

我有两个目录:srcprojects.我想阻止自己跑步,git ...除非我特别在里面srcprojects。这可能吗?

答案1

阻止二进制文件运行很困难,但对于典型情况,存在一种简单的保护方法:

  1. 您定义一个覆盖该名称的 shell 函数。这显然在另一个(也是另一个用户的)shell 中不起作用。
  2. 您将二进制文件从 $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

例子:

例子

相关内容