Массив Bash, объявленный в функции, не доступен вне функции

Кроме того, sudo единственный другой метод, о котором я знаю, должен использовать setuid., это - механизм, встроенный в Unixes, где можно установить немного на программе на диске так, чтобы каждый раз, когда кто-то выполняет его, исполняемый файл был выполнен как владелец файлов а не пользователь, пытающийся выполнять его.

Но это средство обычно не работает со сценариями или программами, которые требуют хижины (#!/bin/...) наверху их. Если файлу включат этот бит, то он обнаружится как это в файловой системе:

-rws------ 1 saml saml 3354099 Oct 28 16:07 someapp

Можно установить программу с этим битом, включенным как это:

$ chmod u+s someapp

Но даже когда этот бит включен, он может часто быть проигнорирован и свести пользователей с ума, которые не понимают, что это дизайном. Часто из соображений безопасности, для не разрешения сценариев оболочки или программ, которые используют хижину для выполнения этим способом.

Страницы справочника (credentials & capabilities) покройте часть этого.

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

Связанная Unix & Linux Q&A

2
13.06.2014, 02:20
1 ответ
[

] из [] man page[]:[

] [
When used in a function, declare makes each name local, as with the local command, unless the ‘-g’ option is used.
] [

]Пример:[

] [
$ function FUNCtst() { declare -gA astr; astr=([a]="1k" [b]="2k" ); declare -p astr; };FUNCtst;declare -p astr
declare -A astr='([a]="1k" [b]="2k" )'
declare -A astr='([a]="1k" [b]="2k" )'
]
6
27.01.2020, 21:54

Теги

Похожие вопросы