프로젝트에서 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
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"