如何在另一个函数中但在不同的 shell 中调用一个函数

如何在另一个函数中但在不同的 shell 中调用一个函数

我有一个包含两个函数的 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

在这里强制使用函数将导致一个不合理且难以维护的解决方案。不要这么做。

相关内容