Скрипт для проверки разрешений - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь создать скрипт для проверки прав доступа к файлу внутри контейнера в Docker, но он заставляет меня говорить «Ожидается двоичный оператор»

Я пытался добавить «тест» (Я видел это через Интернет, но это не сработало.)

#!/bin/bash
docker exec -i container1 touch /home/ubuntu/tryme

if [ -f -rwx container1:/home/ubuntu/tryme ];
   then
     echo "Full Permissions";
   else
     echo "Not every permission. It will be updated"
    docker exec -i container1 chmod 777 /home/ubuntu/tryme;
   fi

Это та часть сценария, которая вызывает у меня головную боль

Я ожидал, что она будет работать хорошо,но он продолжает говорить "Ожидается бинарный оператор"

Ответы [ 2 ]

2 голосов
/ 05 июля 2019

Итак:

  1. Получить права доступа к файлу.
  2. Проверьте, соответствуют ли права доступа к файлам.

Как:

filepermissions=$(stat -c '%a' /home/ubuntu/tryme)
if [ "$filepermissions" = "777" ]; then
    echo "File permissions are set to 777"
else
    echo "They are not set to 777"
fi

[ -f -rwx container1:/home/ubuntu/tryme ] недействителен.Флаг -f из test проверяет (из man test ):

-f FILE
    FILE exists and is a regular file 

-f -rwx проверяет, существует ли файл -rwx.Тогда третий аргумент недействителен и [ или test ожидает binary operation.В качестве третьего аргумента он ожидает бинарную операцию -o или -a, любой другой недопустим и не имеет никакого смысла.

Если файл находится внутри докера, просто изменить скрипт, чтобы получитьправа доступа к файлу внутри контекста Docker-контейнера:

filepermissions=$(docker exec -i container1 stat -c '%s' /home/ubuntu/tryme)
0 голосов
/ 05 июля 2019

Параметр -f предназначен для проверки, является ли аргумент файлом, поэтому -rwx не является файлом.Удалите -rwx из if, а затем, до или после эха, выполните chmod.

Если вы хотите знать, является ли это файл и имеют все разрешения, возможно, вы можете попробовать с этим

#!/bin/bash
docker exec -i container1 touch /home/ubuntu/tryme

if [ -f container1:/home/ubuntu/tryme && -rwx container1:/home/ubuntu/tryme ]; then
    echo "Full Permissions"
else
    echo "Not every permission. It will be updated"
    docker exec -i container1 chmod 777 /home/ubuntu/tryme
fi

Надеюсь, это поможет вам, я могу объяснить на испанском, если вы хотите.

С уважением.

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