Причиной моей проблемы оказалась -несуществующая цель. Вместо default.target
(, который является символической ссылкой, по крайней мере, в CentOS, но не соответствует уровню запуска ), я должен был использовать multi-user.target
, который соответствует уровню запуска 3. Тогда правильная конфигурация становится:
[Install]
WantedBy=multi-user.target
Спасибо всем за уделенное время и отзывы!
Patterns to be brace expanded take the form of an optional preamble, followed by either a series of comma-separated strings or a sequence expression between a pair of braces
Ваша попытка
mkdir /home/karan/{P*}/123
не является допустимой формой раскрытия фигурных скобок, так как внутри фигурных скобок нет ни запятых, ни последовательности. Таким образом, вы получаете именно то, что отдали, /home/karan/{P*}/123
.
mkdir /home/karan/{P*,}/123
— это расширение скобок (обратите внимание на запятую ), которая пытается создать каталоги /home/karan/P*/123
и /home/karan//123
. Обратите внимание, что P*
по-прежнему не расширяется расширением имени файла, потому что еще нет каталогов .../Pictures/123
и .../Public/123
. Другими словами, если совпадений нет, расширения имени файла не происходит.
В любом случае, как показывает (1 ), нет смысла использовать раскрытие фигурной скобки с одним элементом, это как качели с одним человеком. Прямой
mkdir /home/karan/P*/123
потерпит неудачу по той же причине, нет соответствия.
Я не вижу хорошего способа избежать написания путей в вашем конкретном случае, но если есть много совпадающих каталогов или путей, цикл for сэкономит вам нажатия клавиш.
for d in /home/karan/P*/; do mkdir "$d"yo; done
С помощью zsh
вы можете сделать:
(){ mkdir $^@/yo; } /home/karan/P*(/)
(где $^array
включаетrcexpandparam
(для расширения массива стилейrc
-)только для расширения $array
, а расширение этого глобуса (здесь с квалификатором глобуса /
для ограничения для файлов типа каталог)превращается в массив $@
с помощью анонимной функции ).
Или вы могли бы сделать:
mkdir /home/karan/P*(/e:REPLY+=/yo:)
(использование квалификатора e
value glob для добавления /yo
к соответствующим файлам ).
Или:
set -o histsubstpattern
mkdir /home/karan/P*(/:s:%:/yo)
(с помощью модификатора стиля :s/string/replacement/
csh -, чтобы добавить /yo
в этом случае. В histsubstpattern
string
интерпретируется как шаблон, и, как и в ${var/pattern/replacement}
ksh, ведущий %
означает, что шаблон закреплен в конце подлежащего )
С rc
или производными:
dirs = ( /home/karan/P*/ )
mkdir $dirs^yo
es
, одна из этих rc
производных также имеет анонимные функции, подобные zsh
выше, хотя и с другим синтаксисом:
@ {mkdir $*^yo} /home/karan/P*/
Сfish
:
set dirs /home/karan/P*/
mkdir ${dirs}yo
С ksh93 или bash (или zsh )вы всегда можете сделать:
dirs=(/home/karan/P*/)
mkdir "${dirs[@]/%/yo}"
Или с любой оболочкой и GNUxargs
:
printf '%syo\0' /home/karan/P*/ | xargs -r0 mkdir
(имейте в виду, что расширениеP*/
(в отличие от zsh
P*(/)
)также будет включать символические ссылки на каталоги. В zsh
замените квалификатор /
glob на -/
, если это действительно то, что вам нужно ).