awk: ошибка времени выполнения - Совместимость между конфигурацией zsh в MacOS Catalina и конфигурацией zsh в Debian Buster - PullRequest
0 голосов
/ 08 мая 2020

У меня есть конфигурация zsh на MacOS Catalina, которая работает хорошо. Нет, я хотел бы получить то же самое, но для Debian 10 Buster.

Проблема возникает при использовании функции PROMPT, которая отображает розовые косые черты, которые разделяют текущую переменную PATH, где каталоги выделены синим.

В MacOS я делаю это так (в свой .zshr c):

# Path with colorized forward slash
slash_color() {
dirs | awk -F "/" '{ blue="%{\033[38;5;75m%}"; \
                     pink="%{\033[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:

zsh prompt for MacOS Catalina

Теперь в Debian Buster я скопировал ~ / .zshr c из MacOS Catalina.

и при отображении PROMPT ПУТЬ текущего рабочего каталога не отображается (пусто) , и я получаю следующую ошибку:

awk: run time error: not enough arguments passed to printf("%{%}~%{%}/")
    FILENAME="-" FNR=1 NR=1

Я не знаю, почему у меня эта ошибка в Debian, а не в MacOS. Я подозреваю, что это связано с разницей в работе моей функции slash_color(), но я не понимаю источник.

Кажется, что в версии Debian для awk отсутствует переменная, но я могу Не вижу, какой.

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

Не делать: printf something. Всегда делайте printf "%s", something. Ошибки awk, поскольку вы передали недопустимые спецификаторы формата printf %{ и %}, но не передали никаких аргументов. Сделайте:

printf "%s%s%s/", blue, $i, pink;

Думаю, вы можете просто:

{gsub("/", pink "/" blue)}1
1 голос
/ 08 мая 2020

Я бы использовал предварительную команду и простое расширение параметров вместо разветвления различных внешних программ.

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 будет сброшен до отображения это вместо того, чтобы встраивать функцию оболочки в саму подсказку.

PWD - текущий рабочий каталог. Модификатор расширения gs.---.--- заменяет каждый / на %F{206}/%F{75}, используя собственные escape-последовательности цвета zsh вместо использования исходных управляющих последовательностей ANSI.

...