我有一个包含两个函数的 shell 脚本。第二个函数需要以另一个用户的身份从新的 bash shell 运行。第一个函数被调用到第二个函数中。函数 1 使用了一些脚本变量。
#!/bin/bash
foo=bar
function1() {
echo -e "$1"
}
function2() {
echo "This is function2"
function1 "I use function1"
echo "I also need to print ${foo}"
}
export -f function2
su username -c "/bin/bash -c function2"
实际上,这个在新的 shell 中运行的 function2 却找不到 function1 和 foo。
有没有办法将它们注入或传递给新函数?
答案1
这是单独的脚本文件而不是函数的工作。
script1.sh
:
#! /bin/bash
echo -e "$1"
script2.sh
:
#! /bin/bash
echo "This is script2"
bash script1.sh "I use script1"
echo "I also need to print ${foo}"
和script.sh
:
#! /bin/bash
foo=bar
export foo
sudo -Eu username bash script2.sh
在这里强制使用函数将导致一个不合理且难以维护的解决方案。不要这么做。