bash - 拦截并阻止命令在 bash 中运行
问题描述
是否可以拦截 bash 中的所有命令并阻止其中一些命令执行?与“trap”命令一样,仅不允许进一步执行该命令。
我是一名网络开发人员,目前正在开发一个小型项目/脚本,通过动态添加不同的别名来帮助网络开发人员的日常生活。例如,作为一名 Web 开发人员,在 Ubuntu 上,通常将所有项目托管在 /var/www/ 结构中,因此可以在该 (/var/www) 文件夹中为这些文件夹命名。我想稍微改进一下我的脚本,并根据项目构建的框架为项目添加别名。如果是 Magento 2,那么通过运行 setup:upgrade 它应该运行“bin/magento setup:upgrade”。我已经尝试过陷阱“某事”调试,但据我所知,无法阻止前面的命令。谢谢!
解决方案
您可以通过滥用来否决命令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
,你可以运行ls
andchown
但不是find
or chmod
。请注意,它不会影响函数或内置函数。
推荐阅读
- visual-studio - Visual Studio(不是 VS Code)可以进行远程 ssh 开发吗?文档说是的,但是
- linux - 如何在 bash 中解析这个 yaml 文件以获取特定值?
- react-native - 如何在 React Native Vector Icon 中选择同名的图标
- android - 无法使用 react-native 运行 android 模拟器(android-studio)
- python - Python中n个特征的梯度下降?吴恩达课程的一部分
- python - 在 Windows 上使用 Docker 创建 Lambda 层时遇到问题
- python - 在python中添加超链接到Excel csv文件
- angular - 缩放时如何从刻度中删除小数?
- micronaut - Micronaut 在 Controller 方法中将对象数组转换为 json 响应
- c# - 从 Firebase 中的实时数据库获取数据后,无法写入 Unity 的 TMPro 文本字段