如何在终端出现Permission is denied错误时显示图片
嘿,这个脑洞挺有意思的!要把终端里的「Permission is denied」错误提示换成可爱的图片,其实可以通过几个实用的思路来实现,下面给你拆解详细步骤:
实现思路与方法
核心逻辑是:捕获命令的错误输出→匹配「Permission is denied」关键词→调用终端图片显示工具展示自定义图片,具体可以用两种方式落地:
方法一:用自定义Shell函数包装常用命令
适合所有bash/zsh环境,通过给容易触发权限错误的命令(比如ls、rm、mkdir)加包装函数,拦截输出并判断:
# 先确保你装了对应终端的图片显示工具:iTerm2用imgcat,Kitty用kitty +kitten icat function check_permission_error() { local cmd="$@" # 执行命令并捕获所有输出 local output=$($cmd 2>&1) local exit_code=$? # 检查输出是否包含权限错误关键词 if echo "$output" | grep -qi "permission is denied"; then # 替换成你的本地图片路径,比如~/pics/denied_cat.png imgcat ~/pics/denied_cat.png else # 非权限错误则正常输出内容 echo "$output" fi # 返回原命令的退出码,不影响后续逻辑 return $exit_code } # 给常用命令加上包装别名 alias ls='check_permission_error ls' alias rm='check_permission_error rm' alias mkdir='check_permission_error mkdir'
方法二:利用Zsh的全局错误捕获(仅Zsh用户)
如果用Zsh,可以直接用TRAPERR函数全局捕获命令错误,不用给每个命令加别名,更省心:
TRAPERR() { # 获取最后一条命令的错误信息 local error_msg=$(fc -ln -1) # 匹配权限错误关键词 if echo "$error_msg" | grep -qi "permission is denied"; then # 替换成你的终端图片命令和本地图片路径 kitty +kitten icat ~/pics/denied_cat.png fi return $1 }
关键注意事项
- 终端兼容性:只有iTerm2、Kitty、Alacritty这类现代终端支持直接在窗口内显示图片,系统默认终端(比如Mac的Terminal.app、Linux的Gnome Terminal)可能无法实现。
- 图片准备:把你想要展示的图片下载到本地绝对路径,不要用外链,代码里替换成对应的路径即可。
- 图片工具安装:iTerm2可以直接从官方获取
imgcat脚本;Kitty自带kitty +kitten icat命令;Alacritty可以安装第三方工具alacritty-imgcat。
内容的提问来源于stack exchange,提问作者PostMaloneM3m3r
相关产品推荐
相关产品推荐

