Как я могу сохранить список аргументов в переменной в bash? - PullRequest
0 голосов
/ 17 марта 2020

Можно ли сделать этот файл чище, не вводя 19 различных переменных. Я попытался поместить все пути в одну и ту же переменную, но я получаю ошибки прав доступа (отредактирован, чтобы показать код, который я использовал внизу). Присвоение им переменных для каждого пути устранило проблему с разрешениями. Затем, как вы можете видеть в нижнем комментарии, я искал способ включить все переменные без необходимости набирать то, что в данный момент работает. Не уверен, что это сработает.

# Reverts permissions from updating

ocpath='/var/www/html/core'
ocpath1='/var/www/html/lib'
ocpath2='/var/www/html/ocs'
ocpath3='/var/www/html/ocs-provider'
ocpath4='/var/www/html/resources'
ocpath5='/var/www/html/settings'
ocpath6='/var/www/html/AUTHORS'
ocpath7='/var/www/html/CHANGELOG.md'
ocpath8='/var/www/html/console.php'
ocpath9='/var/www/html/COPYING'
ocpath10='/var/www/html/cron.php'
ocpath11='/var/www/html/db_structure.xml'
ocpath12='/var/www/html/index.html'
ocpath13='/var/www/html/index.php'
ocpath14='/var/www/html/occ'
ocpath15='/var/www/html/public.php'
ocpath16='/var/www/html/remote.php'
ocpath17='/var/www/html/robots.txt'
ocpath18='/var/www/html/status.php'
ocpath19='/var/www/html/version.php'

htuser='someuser'
htgroup='someusergroup'

chown -R ${htuser}:${htgroup} $ocpath $ocpath2 $ocpath3 $ocpath4 $ocpath5 $ocpath6 $ocpath7 $ocpath8 $ocpath9 $ocpath10 $ocpath11 $ocpath12 $ocpath13 $ocpath14 $ocpath$15 $ocpath16 $ocpath17 $ocpath18 $ocpath19

# chown -R ${htuser}:${htgroup} $ocpath1:$ocpath19
$ocpath='/var/www/html/filename' '/var/www/html/filename2' '/var/www/html/filename3'

Ответы [ 2 ]

3 голосов
/ 17 марта 2020

Для этого предназначены массивы.

ocpaths=(
  '/var/www/html/core'
  '/var/www/html/lib'
  '/var/www/html/ocs'
  '/var/www/html/ocs-provider'
  '/var/www/html/resources'
  # etc
)

htuser='someuser'
htgroup='someusergroup'

chown -R "${htuser}:${htgroup}" "${ocpaths[@]}"
0 голосов
/ 17 марта 2020

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

#!/bin/sh

set -- # Clear the positional arguments
for t in core lib ocs ocs-provider resources settings AUTHORS \
                CHANGELOG.md console.php COPYING cron.php \
                db_structure.xml index.html \
                index.php occ public.php remote.php \
                robots.txt status.php \
                version.php; do
        set -- "$@" "/var/www/html/$t"
done
htuser=someuser
htgroup=someusergroup

chown -R ${htuser}:${htgroup} "$@"

Обратите внимание, что в качестве побочного эффекта это очищает позиционные аргументы. Хотя, честно говоря, вы могли бы просто захотеть chown "$htuser:$htgroup" -R /var/www/html/* или (более разумно) вызвать chown в l oop и избежать всей злобности правила цитирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...