Unix функция не может быть вызвана после переключения пользователя в сценарии оболочки - PullRequest
0 голосов
/ 24 января 2020

Приведенный ниже скрипт выполняется с root пользователем. После переключения пользователя Unix функция показывает ошибку.

test. sh

#!/bin/bash
fn_test()
{
echo "This is function"
}
whoami
fn_test
su - oracle<<EOF
whoami
fn_test #This function not called
EOF
exit 0

O/P
root $ ./test.sh
root
This is function
oracle
-ksh[2]: fn_test: not found [No such file or directory]

1 Ответ

0 голосов
/ 24 января 2020

Вы не понимаете, что на самом деле делает su: вы надеетесь, что он просто обманет пользователя, когда он начнет новый процесс. Вы можете управлять им с помощью ps в интерактивном сеансе: вы видите исходную оболочку, команду su, новую оболочку, запущенную su, и текущую команду ps.

в качестве оболочки Функция является локальной для оболочки, ее нельзя использовать в (грандиозной) дочерней оболочке.

Лучшее, на что вы можете надеяться, - это передать что-то через окружение. Я знаю, что псевдонимы могут быть там неуверенными для функций. Более того, это абсолютно зависит от оболочки и не может быть переносимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...