Не удалось выполнить команду псевдонима от имени другого пользователя

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

2
25.09.2017, 23:24
2 ответа

Псевдонимы не раскрываются, когда оболочка не интерактивна, если только опция оболочки expand_aliasesне установлена ​​с помощью shopt -s expand_aliases.

Псевдонимы — это инструмент быстрого доступа для интерактивного использования. Вместо этого для любого сценария используйте функцию оболочки :

.
startservices () {
    # commands go here
}

Функции оболочки во многих отношениях более гибкие, чем псевдонимы.Они могут принимать аргументы, как это делает сценарий оболочки, для начала :

.
startservices () {
    user="$1"
    service="$2"
    # code to start service "$service" as user "$user"
}

Вам не нужно явно указывать источник .bash_profileдругого пользователя. Вместо этого используйте sudo -i. Это запустит оболочку входа в систему, которая будет читать .bash_profileпри запуске :

.
$ sudo -i -u User2 startservices

Для этого требуется, чтобы startservicesбыл сценарием или другой внешней утилитой в $PATHиз User2, функцией оболочки, определенной в файлах запуска оболочки User2, или псевдонимом (с оболочкой. работает с набором expand_aliases), определенным в файлах запуска оболочки User2.

См. также Есть ли веская причина запускать sudo su?

5
27.01.2020, 21:56

Псевдоним определен в профиле _.bash пользователя user1. Когда вы используете «su -l user2», он фактически очищает все переменные среды для пользователя1 и вместо этого загружает переменные пользователя2, где псевдоним «startservices» не определен.

Вы можете использовать опцию "su -p ", которая сохранит текущую среду,но в этом случае user2 должен иметь разрешение на чтение файла.bashrc user1.

0
27.01.2020, 21:56

Теги

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