sudo bashを使用するときにエイリアスを保持する


9

私のアカウントには独自のエイリアスコマンドを備えたCentos 5.5サーバーがあります。sudo bashこれらのエイリアスを使用できる場合は、ルートのにエイリアスを追加する必要はありませんでした.bashrc

Centos 6.5である別のサーバーがあります。しかし、を実行するとsudo bash、ログインしているユーザーのエイリアスは使用されません。私が使用するときに、ログインしているユーザーのエイリアスを含めるようにどこに設定するかを誰かが知っていますsudo bashか?


:エイリアスはので、多分ここで答えは動作します、環境を経由して継承されている私だと思うunix.stackexchange.com/questions/92998/...
Barmar

5.5はおそらく呼び出し元の$ HOMEを保持していましたが、6.5は保持していません。参照sudo sudo -V出力とenv_keepsudoersのmanページでは。
ステファンChazelas

1
バーマーとステファンに感謝します。あなたの答えはどちらも正しい方向に私を向けました。私はsudoersで以下を設定する必要がありました:Defaults !always_set_homeおよびDefaults !env_reset`
Tyler Knotek

回答:


6

〜/ .bashrcに次の行を追加します。

alias sudo='sudo '

bashマニュアルから

エイリアスを使用すると、文字列を単純なコマンドの最初の単語として使用したときに、その文字列を単語の代わりに使用できます。シェルは、aliasおよびunalias組み込みコマンドで設定および設定解除できるエイリアスのリストを維持します。

各シンプルコマンドの最初の単語は、引用符で囲まれていない場合、エイリアスがあるかどうかが確認されます。その場合、その単語はエイリアスのテキストで置き換えられます。文字「/」、「$」、「 `」、「=」、および上記のシェルメタ文字または引用文字は、エイリアス名に表示されない場合があります。置換テキストには、シェルのメタ文字など、有効なシェル入力を含めることができます。置換テキストの最初の単語はエイリアスに対してテストされますが、展開されるエイリアスと同一の単語は2回目に展開されません。これは、たとえば、lsを "ls -F"にエイリアスすることができ、Bashが置換テキストを再帰的に展開しようとしないことを意味します。エイリアス値の最後の文字がスペースまたはタブ文字である場合、エイリアスに続く次のコマンドワードもエイリアス展開についてチェックされます。

したがって、Bashはエイリアスのコマンドの最初の単語のみをチェックし、その後の単語はチェックされません。つまり、sudo llのようなコマンドでは、最初の単語(sudo)だけがbashによってエイリアスがチェックされ、llは無視されます。エイリアス値の最後にスペースを追加することにより、エイリアス(つまりsudo)の次の単語をチェックするようにbashに指示できます。


zshでも動作します。ありがとうございました!
dzhi

これにより、sudoコマンドでエイリアスを使用できるようになります。たとえばsudo some_alias ...、OPが求めているのは、を使用して別のユーザーに切り替えた後、自分のユーザーに対して定義されたエイリアスを機能させる方法sudoです。私がsome_alias定義したとしましょう。私はときsudoroot使用してsudo su、新しい環境が作成され、そのエイリアスが定義されていません。環境をエクスポートする必要-Eがあるsudoコマンドのパラメーターがありますが、エイリアスがその一部ではないようです。
David FerenczyRogožan19年

0

sudo -E環境をエクスポートするを使用します。


3
エイリアスは含まれません(Ubuntu 16.04.1でテスト済み)
Antonios Hadjigeorgalis '20

それは機能していますが、としてのみsudo -E bashです。suas と一緒に使用するとsudo -E su、ユーザーの.bashrcエイリアス(プロンプト、プロンプトなど)で定義されたものは保持されませんが、どちらの場合も環境変数が保持されているように見えます。これがどのように機能するのか正確にはわかりません。
David FerenczyRogožan19年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.