Похоже, вы пытаетесь выполнить передачу по ссылке функцию типа.
Они не очень подходят для сценариев bash
. Мы можем подделать его с помощью команды eval
, но это имеет много рискованного поведения (потенциальная оценка команд, встроенных в строки), и поэтому не рекомендуется.
В этом примере код будет выглядеть примерно так:
function check_cases {
case $2 in
r) eval $1=\"\$$1 Read\" ;;
w) eval $1=\"\$$1 Write\" ;;
x) eval $1=\"\$$1 Execution\" ;;
esac
}
check_cases var r
check_cases var w
check_cases var x
echo $var
Вместо этого обычно лучше использовать семантику передачи по значению ; просто верните желаемое значение и попросите вызывающего добавить его в переменную.
например.
function check_cases {
case $1 in
r) echo " Read" ;;
w) echo " Write" ;;
x) echo " Execution" ;;
esac
}
var="$var$(check_cases r)"
var="$var$(check_cases w)"
var="$var$(check_cases x)"
echo $var
Сначала я бы попробовал следующее:
chattr -i [directory]
chattr -a [directory]
chattr
изменяет атрибуты файла (и каталога) в файловой системе Linux
chattr +[option] adds an attribute
chattr -[option] removes and attribute
Флаг только добавления 'a'
предотвращает удаление каталога и любых файлов или каталогов, созданных в нем.
Элемент с атрибутом 'i'
не может быть изменен: его нельзя удалить или переименовать.