2

質問は

これら2つのコマンドの実行の違いは正確には何ですか.

ルートとして、カスタム環境を作成しました。変数

export A="abcdef"

次にルートシェルで

sudo -i
echo $A  

戻り値

abcdef (as expected)

ただし、通常のユーザーに戻って実行すると

sudo -i echo $A

空白行を返します。

コマンド sudo echo $A を実行すると、環境変数と通常のユーザーのシェルが使用されますか?

sudo echo $A を実行しても abcdef を取得する方法はありますか?

ありがとう


編集1

変数 A をルートとして作成したと言うとき、ルートの .profile などでこれを行ったことを意味すると思います。--> (はい!)


編集2

これは完全に理にかなっていますが、いくつか問題があります。

私がする時

sudo -i 'echo $A' 

-bash
: echo $A: command not found が表示されます。

しかし、私がするとき

su -c 'echo $A' 

それは返す

abcdef

何が問題なのですか

sudo -i 'echo $A' 

指図?

4

3 に答える 3

3

環境を に渡したい場合は、次sudoを使用しsudo -Eます。

-E    The -E (preserve environment) option indicates to the
      security policy that the user wishes to preserve their
      existing environment variables.  The security policy may
      return an error if the -E option is specified and the user
      does not have permission to preserve the environment.

環境は、対話的にも、コマンド ラインから何を実行しても維持されます。

于 2012-07-31T20:05:54.613 に答える
2

ルートとして変数を作成したと言うときA、ルートの .profile などでこれを行ったことを意味すると思います。そして、通常のユーザーは設定していないという意味だと思いますA。その場合、以下が適用されます。

コマンドを実行すると、sudo -i echo $Aこれは最初にローカル シェルによって解釈され、$A置換されます。その結果、sudo -i echo実際に実行されるのは です。

つまり、これは次のとおりです。

sudo -i 'echo $A'

echo $Aそれは sudo シェルに渡されます。

~ rnapier$ sudo -i echo $USER
rnapier
~ rnapier$ sudo -i 'echo $USER'
root

次の構文を試してください。

sudo -i echo '$USER'
于 2012-07-31T20:20:29.653 に答える
0

私のマシンでは結果を複製できませんでしたが、sudo のマニュアルページでは、 -i オプションがいくつかの変数を設定解除/削除することを指定しています。

man sudo

-i [コマンド]

-i (初期ログインをシミュレート) オプションは、対象ユーザーの passwd(5) エントリで指定されたシェルをログイン シェルとして実行します。これは、.profile や .login などのログイン固有のリソース ファイルがシェルによって読み取られることを意味します。コマンドが指定されている場合、それは実行のためにシェルに渡されます。それ以外の場合は、対話型シェルが実行されます。sudo は、シェルを実行する前に、そのユーザーのホーム ディレクトリに移動しようとします。また、環境を初期化し、DISPLAY と TERM を変更せずに、 HOME 、 MAIL 、 SHELL 、 USER 、 LOGNAME 、および PATH を設定し、Linux および AIX システムの /etc/environment の内容も設定します。他のすべての環境変数は削除されます。

だから私は -i オプションなしで試してみます。

于 2012-07-31T20:00:50.827 に答える