awk:运行时错误 - MacOS Catalina 上的 zsh 配置与 Debian Buster 上的 zsh 配置之间的兼容性
awk: runtime error - Compatility between zsh config on MacOS Catalina and zsh config on Debian Buster
我在 MacOS Catalina 上有一个运行良好的 zsh 配置。不,除了 Debian 10 Buster,我也想得到相同的东西。
使用 PROMPT 函数时出现问题,该函数显示粉红色斜杠,用于分隔当前工作的 PATH,其中目录为蓝色。
在 MacOS 上,我这样做(进入我的 .zshrc):
# Path with colorized forward slash
slash_color() {
dirs | awk -F "/" '{ blue="%{3[38;5;75m%}"; \
pink="%{3[38;5;206m%}"; \
for (i=1; i<NF; i++) \
printf blue $i pink "/"; \
printf blue $NF pink; \
}';
}
# Prompt final
PROMPT=$'%F{13}|%F{green}%n@%F{cyan}%m%F{13}|%f%T%F{13}|$(slash_color)%F{13}|%F{7} '
PROMPT 的结果如下:
现在,在 Debian Buster 上,我从 MacOS Catalina 复制了 ~/.zshrc。
和当显示 PROMPT 时,不显示当前工作目录的 PATH(空) 并且出现以下错误:
awk: run time error: not enough arguments passed to printf("%{%}~%{%}/")
FILENAME="-" FNR=1 NR=1
我不知道为什么我在 Debian 上有这个错误,而在 MacOS 上没有。我怀疑这是由于我的 slash_color()
函数的工作方式不同,但我不明白其来源。
似乎 awk
的 Debian 版本中缺少一个变量,但我看不到哪个变量。
不要做:printf something
。永远做 printf "%s", something
。 awk 错误,因为您传递了无效的 printf
格式说明符 %{
和 %}
,但您没有传递任何参数。做:
printf "%s%s%s/", blue, $i, pink;
我想你可以:
{gsub("/", pink "/" blue)}1
我会使用预命令挂钩和简单的参数扩展,而不是派生各种外部程序。
precmd () {
bar='%F{13}|'
prompt="$bar%F{green}%n@%F{cyan}%m$bar%f%T$bar%F{75}"
prompt+=${PWD:gs./.%F{206}/%F{75}}
prompt+="$bar%F{7} "
}
将此添加到您的 .zshrc
文件中,prompt
将在显示之前重置,而不是在提示本身中嵌入 shell 函数。
PWD
是当前工作目录。 gs.---.---
扩展修饰符将每个 /
替换为 %F{206}/%F{75}
,使用 zsh
自己的颜色转义序列而不是使用原始 ANSI 转义序列。
我在 MacOS Catalina 上有一个运行良好的 zsh 配置。不,除了 Debian 10 Buster,我也想得到相同的东西。
使用 PROMPT 函数时出现问题,该函数显示粉红色斜杠,用于分隔当前工作的 PATH,其中目录为蓝色。
在 MacOS 上,我这样做(进入我的 .zshrc):
# Path with colorized forward slash
slash_color() {
dirs | awk -F "/" '{ blue="%{3[38;5;75m%}"; \
pink="%{3[38;5;206m%}"; \
for (i=1; i<NF; i++) \
printf blue $i pink "/"; \
printf blue $NF pink; \
}';
}
# Prompt final
PROMPT=$'%F{13}|%F{green}%n@%F{cyan}%m%F{13}|%f%T%F{13}|$(slash_color)%F{13}|%F{7} '
PROMPT 的结果如下:
现在,在 Debian Buster 上,我从 MacOS Catalina 复制了 ~/.zshrc。
和当显示 PROMPT 时,不显示当前工作目录的 PATH(空) 并且出现以下错误:
awk: run time error: not enough arguments passed to printf("%{%}~%{%}/")
FILENAME="-" FNR=1 NR=1
我不知道为什么我在 Debian 上有这个错误,而在 MacOS 上没有。我怀疑这是由于我的 slash_color()
函数的工作方式不同,但我不明白其来源。
似乎 awk
的 Debian 版本中缺少一个变量,但我看不到哪个变量。
不要做:printf something
。永远做 printf "%s", something
。 awk 错误,因为您传递了无效的 printf
格式说明符 %{
和 %}
,但您没有传递任何参数。做:
printf "%s%s%s/", blue, $i, pink;
我想你可以:
{gsub("/", pink "/" blue)}1
我会使用预命令挂钩和简单的参数扩展,而不是派生各种外部程序。
precmd () {
bar='%F{13}|'
prompt="$bar%F{green}%n@%F{cyan}%m$bar%f%T$bar%F{75}"
prompt+=${PWD:gs./.%F{206}/%F{75}}
prompt+="$bar%F{7} "
}
将此添加到您的 .zshrc
文件中,prompt
将在显示之前重置,而不是在提示本身中嵌入 shell 函数。
PWD
是当前工作目录。 gs.---.---
扩展修饰符将每个 /
替换为 %F{206}/%F{75}
,使用 zsh
自己的颜色转义序列而不是使用原始 ANSI 转义序列。