プロジェクトで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"