sudo -u 不保留来自我的 shell 的脚本

问题描述 投票:0回答:1

我有一个 bash 脚本,它向我的 shell 添加了一些功能。脚本如下

#!/usr/bin/env bash

function invoke_echo() {
    echo "test"
}

当我将此脚本源到我的 shell 并调用

invoke_echo
方法时,它会按预期打印“test”。

但是,当我使用

sudo -u
作为不同用户运行它时,会抛出错误

sudo -u some_user invoke_echo

所有这些指令都是从同一个 shell 会话调用的。整个 shell 会话看起来像这样,

[ Tue Jan 23,03:01:49 - ~ ]
vjoshi: cat test_echo.sh
#!/usr/bin/env bash

function invoke_echo() {
    echo "test"
}

[ Tue Jan 23,03:01:59 - ~ ]
vjoshi: invoke_echo
-bash: invoke_echo: command not found

[ Tue Jan 23,03:02:04 - ~ ]
vjoshi: source test_echo.sh

[ Tue Jan 23,03:02:11 - ~ ]
vjoshi: invoke_echo
test

[ Tue Jan 23,03:02:14 - ~ ]
vjoshi: sudo -u some_user invoke_echo
sudo: invoke_echo: command not found

我想将

invoke_echo
称为 some_user,但我想在 sudo -u 之前获取 test_echo.sh,因为我也在当前脚本中的其他一些地方使用
invoke_echo
。多次执行脚本源代码对我来说看起来不太整洁

bash sudo
1个回答
0
投票

这是可能的:

user@host:~$ foo=bar
user@host:~$ sudo adduser test
adduser: The user `test' already exists.
user@host:~$ sudo -u test bash -c "echo $foo"
bar

由于这是一个函数,也许你想做类似的事情:

sudo -u test bash -c "source /path/to/script-with-function.sh; function_name"
© www.soinside.com 2019 - 2024. All rights reserved.