mar*_*321 3 linux bash shell grep docker
Grep 通常以红色显示突出显示的文本,这正是我想要的,但这次无论我做什么它似乎都不会这样做。我是从 Docker 容器(nginx:1.19-alpine更具体地说)执行此操作,并使用RUN apk add bash. 然后我添加了一个~/.bashrc包含以下内容的配置文件:
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color|*-256color) color_prompt=yes;;
esac
force_color_prompt=yes
color_prompt=yes
if [ "$color_prompt" = yes ]; then
PS1=' ${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@server-nginx\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1=' ${debian_chroot:+($debian_chroot)}\u@server-nginx:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@server-nginx: \w\a\]$PS1"
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
alias ls='ls --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
Run Code Online (Sandbox Code Playgroud)
问题是它$ ls确实显示了彩色输出。但是当我尝试通过 grep 管道它时,它仍然是黑白的。
// Directories have colors!!
$ ls
// No color highlighting here
$ echo "baba" | grep --color=always ba
// No colors here either
$ ls | grep bin
Run Code Online (Sandbox Code Playgroud)
在不同的 Docker 映像上完全相同的设置工作得很好(php:7.4-fpm和node:14),所以也许该映像有一些特定的地方nginx:1.19-alpine,它不显示 grep 的颜色?
PSprintf '%q\n' "$GREP_COLORS" "$GREP_COLOR"打印此输出:
$ printf '%q\n' "$GREP_COLORS" "$GREP_COLOR"
ms=01\;33
''
Run Code Online (Sandbox Code Playgroud)
mar*_*321 10
经过一番摸索,我终于找到了解决方案。这个特定 Docker 镜像 ( ) 附带的 grep 版本nginx:1.19-alpine是某种“busybox 版本的 grep”。不管怎样,升级 grep 就成功了:
// Inside of Dockerfile added this
RUN apk add --no-cache --upgrade grep
Run Code Online (Sandbox Code Playgroud)
现在 grep 显示彩色输出。唷!希望这可以帮助其他可能遇到同样问题的人。
| 归档时间: |
|
| 查看次数: |
1581 次 |
| 最近记录: |