sudo make install を実行すると、環境変数は渡されません。

sudo make install を実行すると、環境変数は渡されません。

モードで実行するときにpkg-configaを使用するのに問題があります。 geany.pcに保存されているファイルを見つけるには、pkg-configを設定する必要があります。MakefilesudoPKG_CONFIG_PATH/usr/local/lib/pkgconfig

私が実行した場合:

$ echo $PKG_CONFIG_PATH
/usr/local/lib/pkgconfig

私が実行した場合sudo

$ sudo echo $PKG_CONFIG_PATH
/usr/local/lib/pkgconfig

それでMakefileを次のように実行してみました。

PLUGIN_DIR=`pkg-config --variable=libdir geany`/geany

all: pyflakes.o
    gcc pyflakes.o -o geanypyflakes.so -shared `pkg-config --libs geany`

pyflakes.o: pyflakes.c
    gcc -Wall -c pyflakes.c -fPIC `pkg-config --cflags geany` 

install:
    echo ${PKG_CONFIG_PATH}
    cp geanypyflakes.so ${PLUGIN_DIR} --verbose

clean:
    rm geanypyflakes.so pyflakes.o


sudo make install

次の結果が表示されます。

echo 

cp geanypyflakes.so `pkg-config --variable=libdir geany`/geany --verbose
`geanypyflakes.so' -> `/geany'

なぜ突然PKG_CONFIG_PATH設定できないのですか?実行するsudo -Eと動作しますが、なぜ突然動作しないのか知りたいです。

編集する

以前にエクスポートを実行しても役に立ちませんでした。

$ export PKG_CONFIG_PATH='/usr/local/lib/pkconfig' && sudo make install
echo 

cp geanypyflakes.so `pkg-config --variable=libdir geany`/geany --verbose
`geanypyflakes.so' -> `/geany'

ベストアンサー1

これ

sudo echo $PKG_CONFIG_PATH

コマンドが期待どおりに実行されませんでした。 sudoが実行される前に、シェル変数はコマンドラインから展開されます。 $ PKG_CONFIG_PATHの周りに一重引用符を使用してsudoコマンドラインで拡張を停止すると、sudoが実行される前にシェル拡張が停止します。

richm@royalcounty:~$ export PKG_CONFIG_PATH=hello
richm@royalcounty:~$ sudo echo $PKG_CONFIG_PATH
hello
richm@royalcounty:~$ sudo echo '$PKG_CONFIG_PATH'
$PKG_CONFIG_PATH

実際、sudo内のechoは変数拡張を実行しないため、元のコマンドが間違っていました。シェルを明示的に実行してこれを強制できます。

richm@royalcounty:~$ sudo -E echo '$PKG_CONFIG_PATH'
$PKG_CONFIG_PATH
richm@royalcounty:~$ sudo sh -c 'echo $PKG_CONFIG_PATH'

richm@royalcounty:~$ sudo -E sh -c 'echo $PKG_CONFIG_PATH'
hello

これは、パラメータなしでメソッドがsudo make install機能しない理由を示しています。-Esudo

おすすめ記事