親の環境を継承せずにコマンドを実行する


14

新しいログインセッションで「あたかも」コマンドを実行する方法はありますか?

私はすでに試しましたenv -i。ただし、設定または設定解除する必要があるさまざまなENV変数を処理する必要はありません。

私も試してみたbash -c "some command"bash -l -c "some commmand"、彼らはすべての現在の環境をコピーします。

私が最も近づいたのは、ゲットーソリューションです。 ssh me@localhost "some command"


/bin/bash --loginその動作を取得するために使用します。例えば、適切なを取得するために使用します$PATH
ダニエルベック

これはに相当しますが/bin/bash --l、すでに試しました。元の環境をコピーします。それを試してください:export SOME_VAL=something。その後/bin/bash --login。その後env | grep SOME_VAL。値はそこにあります。
dgo.a

回答:


12

sudo特権やユーザーのパスワードを必要としないが、新しいログインで得られるような環境を提供する回答を次に示します。

env -i HOME="$HOME" bash -l -c 'your_command'

例:

$ export ABC=123
$ env -i HOME="$HOME" bash -l -c 'env' | grep ABC
$ env HOME="$HOME" bash -l -c 'env' | grep ABC
ABC=123

説明のためにこれを分解します。

  1. env -i HOME="$HOME":環境をクリアします。-i空の環境設定は一切の変数。これは問題がありbash -lます.bash_profile。なぜなら、単純に実行しようHOMEとしても、設定されていないためなどをロードできないからです。これを緩和するために、明示的にを渡しHOME="$HOME"HOME(およびのみHOME)が設定された環境を作成します。

  2. bash -l -c ...:ログインシェルで目的のコマンドを実行します。クリーンな環境から始めてすべてをリロードする必要があるため、このためのログインシェルが必要になります。

特に:

  • これにはsudo特権は必要ありません(sudoバージョンには必要です)。
  • これには、ユーザーのパスワードを入力する必要はありません(suバージョンでは必要です)。
  • これには、SSHサーバーを実行し、マシンに再度ログインするために使用できるパスワードなしのキーが必要です(sshバージョンでは必要です)。

ありがとう、エリオット。それはとてもシンプルで明白に見えます...今ではそれが私に指摘されているのです。
dgo.a

12
su -l $USER

sudo -u $USER -i

さらに積極的なtryのenv -i bash場合は、$ HOMEや$ TERMを含むすべての設定を解除します


2
ありがとう!2番目のコマンドは、まさに私が望むものを与えます。2時間以上検索しましたが、返信に近いものは見つかりませんでした。返信に基づいて、man sudo「ターゲットユーザーが呼び出しユーザーと同じである場合、パスワードは不要です」に戻りました。(su常にパスワードを要求するようです。)manページの最初の段落で非常に単純なものを見落としているのは非常に愚かです:(最初にsudoを避けました。再び!
-dgo.a

1
他のユーザーへの単なるヒント...ログインした$USER場合は、rootとしてログインしてからユーザーとしてログインする必要がありsudo -u ...ます。sudo -uユーザーとして行う場合は、継承します。
アダム・ゲント

sudoアクセスできない場合、これは明らかに機能しません。sudoを必要としない代替方法はありますか?
user5359531

@ user5359531:はい– su -l $USER
user1686

1
パスワードを要求する; 私はsshキー認証でログインしているので、パスワードが何なのかさえ知りません。また、パスワードプロンプトはスクリプト機能を無効にします。これまでのところ、その外観ssh $USER@localhost <command>は良くなっているようです
-user5359531
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.