首页 > 解决方案 > 拦截并阻止命令在 bash 中运行

问题描述

是否可以拦截 bash 中的所有命令并阻止其中一些命令执行?与“trap”命令一样,仅不允许进一步执行该命令。

我是一名网络开发人员,目前正在开发一个小型项目/脚本,通过动态添加不同的别名来帮助网络开发人员的日常生活。例如,作为一名 Web 开发人员,在 Ubuntu 上,通常将所有项目托管在 /var/www/ 结构中,因此可以在该 (/var/www) 文件夹中为这些文件夹命名。我想稍微改进一下我的脚本,并根据项目构建的框架为项目添加别名。如果是 Magento 2,那么通过运行 setup:upgrade 它应该运行“bin/magento setup:upgrade”。我已经尝试过陷阱“某事”调试,但据我所知,无法阻止前面的命令。谢谢!

标签: bash

解决方案


您可以通过滥用来否决命令command_not_found_handle

# Save the PATH
realpath="$PATH"
# Set a PATH without commands (weirdly can't be empty)
PATH="/"

command_not_found_handle() (
  if [[ "$1" == *d* ]]
  then
    echo "Sorry, no commands with 'd' allowed" >&2
    return 1
  else
    PATH="$realpath" 
    unset command_not_found_handle
    "$@"
  fi
)

有了这个.bashrc,你可以运行lsandchown但不是findor chmod。请注意,它不会影响函数或内置函数。


推荐阅读