Проблема с сценарием bash, устанавливающим права доступа для родительской папки. - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть сценарий bash, который принимает параметры файла / папки, пронумерованные разрешения, пользователя и группу.

Он определяет, является ли переменная пути файлом или папкой, и устанавливает разрешения соответственно.

Проблема в том, что когда я передаю папку, она устанавливает файлы в пределах и самой папки для нового пользователя и группы.

Как я могу установите только файлы в папке l oop , а не в папке

#!/bin/bash
path=$1
ocatal=$2
user=$3
group=$4
GREEN='\033[0;32m'
RED='\033[0;31m'
if [ $2 -gt 766 ]
then
   tput setaf 1
   echo -e "${RED}777 is not allowed!!! :-("
   tput sgr0
   exit 1   
else
    if [ -f "$path" ] 
    then
        chmod $2 $1
        chown ${3:=$(/usr/bin/id -run)}:$4 $1 
        tput setaf 2
        echo Permission set to $2
        echo User set to $3
        echo Group set to $4
        echo `ls -l $1`
    else
        for f in $path/*
        do
            chmod $2 $f
            chown ${3:=$(/usr/bin/id -run)}:$4 $f 
            tput setaf 2
            echo Permission set to $2
            echo User set to $3
            echo Group set to $4    
        done
        echo `ls -l $1`
    fi
   exit 0
fi

1 Ответ

0 голосов
/ 28 февраля 2020

Проблема в том, что когда я передаю папку, она устанавливает файлы внутри и саму папку для нового пользователя и группы.

Это происходит из-за этого шаблона $path/* также расширяется до $ path /, и это вызывает изменение папки perms. * означает любой файл (символ) или ничего, поэтому $ path также находится в списке.

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

$ echo testdir/*
testdir/*

и с файлами

$ echo testdir/*
testdir/file testdir/file2

Рассмотрим это

[[  -d "$path" ]] && {
    cd "$path"
    chmod -f $ocatal *
    chown -f $user:$group *
    ...
    cd - # back to previous folder
}

-f для подавления сообщений об ошибках в случае пустая папка

И добавьте этот код DEF='\e[0m' к своим цветам, чтобы установить цвет по умолчанию.

echo -e "${RED}777 is not allowed!!! :-($DEF"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...