синтаксическая ошибка рядом с неожиданным токеном

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

0
16.03.2021, 00:35
1 ответ

Вы пытаетесь использовать расширенный шаблон подстановки в сценарии, работающем под /bin/sh, который представляет собой оболочку, которая обычно не понимает такого рода шаблоны.

Либо переключитесь на оболочку, которая знает об этих шаблонах, например bash, kshили zsh(, с соответствующими параметрами, установленными в каждой оболочке ), либо используйте что-то, что /bin/shпоймет, например какfind:

#!/bin/sh

find kube/xx/bb -prune ! -name 'abc*' ! -name 'cdf*' -type d -exec basename {} \;

Или, если вы используете GNUfind:

#!/bin/sh

find kube/xx/bb -prune ! -name 'abc*' ! -name 'cdf*' -type d -printf '%f\n'

В обоих этих примерах я предполагаю, что !перед cdf*в вопросе является опечаткой.

Обратите внимание, что редко возникает необходимость запускать xargsв конвейере с find, поскольку findимеет вполне пригодный для использования предикат -execдля выполнения произвольно сложных команд.

Кроме того, Почему *не *parse `ls`(и что делать вместо )?


Более ручной подход:

#!/bin/sh

for pathname in kube/xx/bb/*/; do
    [ -d "$pathname" ] || continue

    name=${pathname%/}
    name=${name#kube/xx/bb/}

    case $name in
        abc*|cdf*) continue ;;
    esac

    printf '%s\n' "$name"
done
3
18.03.2021, 22:25

Теги

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