Как вывести в терминал права конкретного пользователя для конкретного файла?

введите сюда описание изображения

Как выводить в терминал права доступа(читать/писать/исполнять) к конкретному файлу для конкретно указанного пользователя?
ls -l выводит все скопом, а stat выводит только для владельца.
Здесь была подобная тема уже 2 года назад, но по ней выходит ошибка, сейчас это можно как то реализовать? прошлая подобная тема По данному коду выходит постоянно ---, независимо от вводимого пользователя.

#!/bin/bash
file=$1
user=$2
for p in r w x; do
  c="-"
  sudo -u "$user" test -$p "$file" && c="$p"
  r=$r$c
done

echo "у пользователя $user имеются права $r на $file"

Ответы (1 шт):

Автор решения: PotroNik

Требуется тщательно доработать напильником, но как то так:

check_grant() {
#Возвращаем ошибку если не передан ни один параметр
fileName=${1:?Параметры не могут быть пустыми}
#Если второй параметр пустой то проверяем для текущего пользователя
userName=${2:-`whoami`}

#Проверяем существует ли файл
[[ -e "${fileName}" ]] || { echo "Файл ${fileName} не существует"; return 1; }
#Получаем группы для пользователя
userGroup=`groups ${userName}`

#Получаем данные о файле
IFS=';' read typeFile userFile groupFile access <<< `stat -c "%F;%U;%G;%A" "${fileName}"`
#(НЕверно)на случай если это каталог убираем из прав букву d
#Исключил, так как данный атрибут можно исключить при выборе элементов
if [[ $userFile == $userName ]]; then
    userPriv=${access:1:3}
elif [[ -n `grep -w "${groupFile}" <<< "${userGroup/*:/}"` ]]; then
    userPriv=${access:4:3}
else
    userPriv=${access:7:3}
fi
printf "%-15s | %-20s | %s" "$userName" "`sed 's/---/ без доступа/;s/x/ запуск/;s/r/ чтение/;s/w/ запись/;s/-//g' <<< "${userPriv}"`" "${typeFile} ${fileName}"
}
# check_grant /etc/crontab
root            |  чтение запись       | обычный файл /etc/crontab

#check_grant /etc/crontab robot
robot           |  чтение              | обычный файл /etc/crontab
→ Ссылка