我想在一个项目中使用 fakeroot,但是该项目有很多我需要传递给 fakeroot 的函数和变量。
#!/bin/bash
myVar="foo"
function testFunction() {
echo "$myVar"
}
fakeroot -- bash -c testFunction
但它没有运行testFunction
或回显myVar
答案1
您还可以使用 的bash
导出函数功能。但是,鉴于这fakeroot
是一个sh
脚本,您需要在一个系统上实现sh
不会BASH_FUNC_fname%%
像那样从环境中删除这些变量dash
。为了确保它不会发生,您可以将其本身fakeroot
解释bash
为bash -o posix
解释sh
器。
#!/bin/bash -
myVar="foo"
testFunction() {
printf '%s\n' "$myVar"
}
export myVar
export -f testFunction
fakeroot=$(command -v fakeroot)
bash -o posix -- "${fakeroot:?fakeroot not found}" -- bash -c testFunction
请注意,您还需要导出myVar
才能供bash
启动的人使用fakeroot
。您也可以在声明它们之前发出 a ,而不是export
同时调用myVar
和。testFunction
set -o allexport
答案2
好吧,我想通了:
#!/bin/bash
myVar="foo"
function testFunction() {
echo "$myVar"
}
tmp_function=$(declare -f testFunction)
fakeroot -- bash -c "$tmp_function; testFunction"