Да, вызываемая вами функция выполняется в текущей оболочке.
Это предполагает, что функция была импортирована (, определена )в текущей оболочке. Это можно было бы сделать, найдя какой-нибудь файл (, например ~/.bashrc ), или написав функцию в текущей оболочке вручную. Вы можете подтвердить это предположение, выполнив:
$ type -a change_path
Если это напечатает определение функции, функция была определена в текущей оболочке и, имея доступ к текущим переменным оболочки, может изменить любую из них.
Это не означает, что функция всегда будет изменять переменные, если функция правильно ограничена, например, используя (...)
вместо{...}
:
$ change_path()(
export PATH="foobar:$PATH";
)
Но на самом деле эта функция все еще работает в текущей оболочке, просто она запускает под-оболочку(...)
Для подтверждения прочтите это из руководства bash (Акцент мой):
FUNCTIONS
A shell function, defined as described above under SHELL GRAMMAR, stores a series of commands for later execution. When the name of a shell function is used as a simple command name, the list of commands associated with that function name is executed. Functions are executed in the context of the current shell; no new process is created to interpret them (contrast this with the execution of a shell script).
Также обратите внимание на разрешения (пользователя, группы, мира )и владельца, поэтому в одном ответе используется sudo cp
вместо только cp
— файлы в /var/log, скорее всего, доступны для чтения только пользователю root. В этом случае sudo cp
также копирует разрешения и устанавливает право собственности на пользователя root. Таким образом, файл в /var/log, принадлежащий пользователю apache, групповому apache с правами доступа 600 (, доступному для чтения только владельцу, а не группе, а также не всем остальным ), оказывается владельцем root, а также только доступный для чтения root … в вашем пользовательском каталоге.
Так что, возможно, проверьте право собственности в целевом каталоге с помощью ls -l
и исправьте с помощью sudo chown
и/или sudo chmod
— я предполагаю, что это создает угрозу безопасности, открывая файлы журнала с разными разрешениями в папке другого владельца. Подумайте об архивировании и/или удалении должным образом.