Ответ 1
Вы можете экспортировать эту функцию, чтобы сделать ее доступной для подоболочки:
export -f my_function
su username -c "my_function"
В моем bash script я выполняю некоторые команды в качестве другого пользователя. Я хочу вызвать функцию bash, используя su
.
my_function()
{
do_something
}
su username -c "my_function"
Вышеупомянутый script не работает. Конечно, my_function
не определяется внутри su
. Одна из моих идей - включить функцию в отдельный файл. У вас есть идея, которая позволяет избежать создания другого файла?
Вы можете экспортировать эту функцию, чтобы сделать ее доступной для подоболочки:
export -f my_function
su username -c "my_function"
Вы можете включить 'sudo' в своей системе и использовать это вместо этого.
У вас должна быть функция в той же области, где вы ее используете. Таким образом, либо поместите функцию внутри кавычек, либо поместите функцию в отдельный script, который вы затем запускаете с помощью su -c.
Другой способ - это сделать случаи и передать параметр исполняемому script. Пример может быть: Сначала создайте файл под названием "script.sh". Затем вставьте в него этот код:
#!/bin/sh
my_function() {
echo "this is my function."
}
my_second_function() {
echo "this is my second function."
}
case "$1" in
'do_my_function')
my_function
;;
'do_my_second_function')
my_second_function
;;
*) #default execute
my_function
esac
После добавления вышеуказанного кода запустите эти команды, чтобы увидеть его в действии:
[email protected]:/# chmod +x script.sh #This will make the file executable
[email protected]:/# ./script.sh #This will run the script without any parameters, triggering the default action.
this is my function.
[email protected]:/# ./script.sh do_my_second_function #Executing the script with parameter
this function is my second one.
[email protected]:/#
Чтобы выполнить эту работу по мере необходимости, вам просто нужно запустить
su username -c '/path/to/script.sh do_my_second_function'
и все должно работать нормально. Надеюсь, это поможет:)