ルートとして実行される小さなシステムアプリケーションを開発しようとしています。このアプリケーションでは、デフォルトユーザー($USER
アプリケーションをrootとして実行しているユーザーではない)のすべての環境変数を一覧表示します$SUDO_USER
。アプリケーションは端末で実行されず、Qt環境からCで開かれたプロセスに依存するため、まず環境を準備してから、その子プロセスから環境変数を取得したいと思います。
私が達成しようとしているものは次のとおりです。
- ルートからユーザーに変更
- ソース ~/.bashrc または ~/.profile など
- printenv [そしてスクリプトの後にインポートされます]
- 再びルートに変更
私はオンラインでいくつかの回避策を見つけて読んでいましたが、これらの回避策(他のユーザーでコマンドを実行している場合)が私が望む結果に役立たないことに気づきました。
上記の作業を行うにはラインが必要です。私が今持っているものは次のとおりです(rootとして実行しています)。
sudo -i -u user sh -c '. /home/user/.bashrc && printenv > /tmp/user.env'
一部の環境変数は表示されますが、/home/user/.bashrcからエクスポートされたカスタム変数は表示されません。
どんな案内にも感謝します。
情報が欠落している場合はお知らせください。
ありがとう、
答え1
あなたのコマンドを試してみましたが、検索するだけです。
sudo -i -u user1 sh -c 'source ~/.bashrc && printenv > /tmp/user.env'
使った源泉代わりにコマンド.
含む~/.bashrc
:
[ws] root ~ >cat /home/user1/.bashrc
# .bashrc
...
export TESTENV="test"
...
コマンドを実行し、以下を表示します/tmp/user.env
。
[ws] root ~ >sudo -i -u user1 sh -c 'source ~/.bashrc && printenv > /tmp/user.env'
[ws] root ~ >cat /tmp/user.env
...
SHELL=/bin/bash
USER=user1
SUDO_COMMAND=/bin/bash -c sh -c source\ ~/.bashrc\ &&\ printenv\ >\
...
TESTENV=test
...
[ws] root ~ >