当我使用以下命令登录 kubernetes v1.23 pod 时:
exec kubectl exec -i -t -n reddwarf-storage reddwarf-postgresql-postgresql-0 -c reddwarf-postgresql -- sh -c "clear; (bash || ash || sh)"
显示错误:
sh: 1: clear: not found
我正在使用docker.io/bitnami/minideb:bullseye
作为基础图像。为什么会发生这个错误?我应该怎么做才能避免这个问题?
答案1
尝试clear
用tput clear
或替换printf '\33[H\33[J'
。clear
(清除屏幕),虽然常见不是标准命令。
tput clear
和printf
是标准的,清除屏幕的转义序列可能因终端而异,tput clear
将查询 termcap 或 terminfo 数据库以获取$TERM
环境变量指定的终端的序列; ,printf
这里我们对 DEC 终端的序列进行硬编码(从VT100终端从 70 年代末开始)由 ANSI X3.64 指定where\33[H
将光标移至起始位置,并\33[J
清除直到屏幕末尾(仅在支持的情况下留下回滚缓冲区和备用屏幕),这是大多数终端和终端仿真器都可以识别的。
答案2
停止错误的最简单方法是从clear
用于登录 Pod 的命令中删除该命令。
下一个最简单的方法是使用斯蒂芬的答案中建议的替代屏幕清除命令。
第三种最简单的方法是更新组织的 pod 中必须存在哪些命令的要求,并将clear
命令添加到列表中。然后更新构建软件的过程以满足新的要求。从那时起,新的 Pod 将包含该clear
命令,并且错误将停止。