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

Понял:

auth_request_set $myheader $upstream_http_x_costumheader;
add_header costum $myheader; 
2
10.02.2021, 07:50
1 ответ

/Applications/Adobe\ Photoshop\ CC\ *перечисляет Adobe Photoshop CCнужные вам каталоги. Но /Applications/Adobe\ Photoshop\ CC\ */Dummy-test/Testперечисляет существующиеTestкаталоги. Передача подстановочных знаков команде, которая создаст данные файлы, не может работать. Вам нужно отделить инструкцию по перечислению существующих файлов от инструкции по созданию новых файлов.

Во второй попытке удалите пробелы вокруг знака равенства. В присваивании не может быть пробелов по обе стороны от знака равенства. И опять же, если Dummy-testуже не существует, INSTALL_DIRSничего не даст.

#!/bin/bash
shopt -s nullglob
photoshop_dirs=(/Applications/Adobe\ Photoshop\ СС\ *)
if ((${#photoshop_dirs[@]} == 0)); then
  echo >&2 "$0: fatal error: Adobe Photoshop CC is not installed."
  exit 1
fi
install_dir=${photoshop_dirs[$((${#photoshop_dirs[@]}-1))]}/Dummy-test/Test
mkdir -p "$install_dir"
mv /private/tmp/com.example.test/PSD "$install_dir/"

Пояснения:

  • shopt -s nullglobприводит к тому, что массив становится пустым, если шаблон подстановочного знака ничему не соответствует. По умолчанию шаблоны подстановочных знаков не изменяются, если они ничему не соответствуют, поэтому массив будет содержать один элемент, который является неизмененным шаблоном с *в нем.
  • Я добавил проверку для остановки с сообщением об ошибке, если подходящего каталога не существует.

Если вас интересует запуск скриптов только в macOS и в системах, которыми вы управляете, я рекомендую использовать zsh, а не bash. Zsh лучше и менее подвержен ошибкам -. Преимущество bash в том, что он устанавливается по умолчанию в Linux и, как правило, в *BSD, в то время как zsh легко устанавливается, но обычно не устанавливается по умолчанию. В macOS bash — очень старая версия, тогда как zsh устанавливается по умолчанию и обновляется с -до -.

#!/bin/zsh
setopt null_glob
photoshop_dirs=(/Applications/Adobe\ Photoshop\ СС\ *)
if (($#photoshop_dirs == 0)); then
  echo >&2 "$0: fatal error: Adobe Photoshop CC is not installed."
  exit 1
fi
install_dir=${photoshop_dirs[-1]}/Dummy-test/Test
mkdir -p $install_dir
mv /private/tmp/com.example.test/PSD $install_dir/
1
18.03.2021, 22:32

Теги

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