Как выполнить рецепт, если файл существует?

Вы можете bindвиджеты vi-{back,for}ward-blank-wordна Ctrl+{влево, вправо}`:

bindkey $'\E[1;5D' vi-backward-blank-word
bindkey $'\E[1;5C' vi-forward-blank-word

или переопределить {back,for}ward-wordвиджеты, чтобы использовать другой WORDCHARS(, чтобы это повлияло на другие привязки (, такие как Alt+{B,F} ), которые используют эти виджеты):

WORDCHARS='~!#$%^&*(){}[]<>?.+;-'
MOTION_WORDCHARS='~!#$%^&*(){}[]<>?.+;-/'

''{back,for}ward-word() WORDCHARS=$MOTION_WORDCHARS zle.$WIDGET
zle -N backward-word
zle -N forward-word

См. такжеinfo zsh select-word-styleструктуру для динамического выбора стилей слов .

Вы также можете использовать его для выбора разных стилей слов для разных виджетов, например:

autoload -U select-word-style
zle -N select-word-style
bindkey '\ez' select-word-style

WORDCHARS='~!#$%^&*(){}[]<>?.+;-' # for the "normal" style
select-word-style normal
zstyle ':zle:*ward-word' word-style space
zstyle ':zle:backward-kill-word' word-style space

Вы получите стиль слова на основе «пробела» -для виджетов *ward-wordи backward-kill-wordи всего, что выбрано с помощью Alt+Z , изначально «обычный»,$WORDCHARS-на основе стиля слова для других виджетов слова.

0
05.10.2021, 22:15
2 ответа

Возможно, это более простое решение, эмулирующее оболочку.:

    $(eval mfn_lstf := $(shell cat ${MFN_LSTF}))
    $(foreach mfn, ${mfn_lstf}, $(MAKE) -f mfd/${mfn} clean;)

И, следующие работы, без эмуляции оболочки:

    if [ -s "$${MFN_LSTF}" ]; then \
        while IFS= read -r mfn; do \
            $(MAKE) -f "mfd/$${mfn}" clean; \
        done < "$${MFN_LSTF}"; \
    fi
0
06.10.2021, 15:39

Вы можете просто написать часть оболочки в рецепте.

clean:
        F="$MF_NAMES_LIST" ;\
        if [ -e "$$F" ] ; then \
                for mfn in $$(cat "$$F") ; do \
                         $(MAKE) -f mfd/$${mfn} clean;\
                done ; \
        fi

Следует отметить, что если вы хотите, чтобы оболочка увидела доллар, вам нужно удвоить его, и что вы хотите, чтобы программа была одной логической строкой, поэтому make отдает ее одной оболочке.

GNUmake имеет расширение, позволяющее запускать весь рецепт в одной оболочке.

Чтение файла с помощью cat в цикле for не является лучшей практикой, например, если в файле есть пробелы, это пойдет не так, но я не исправляю это здесь, чтобы сохранить код ближе к оригиналу.

1
06.10.2021, 15:47

Теги

Похожие вопросы