我有一个 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
。多次执行脚本源代码对我来说看起来不太整洁
这是可能的:
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"