TL; DR:(エイリアスではなく)定義されsudo -i
た関数を実行したり/root/.bashrc
、そのファイルからエクスポートされた変数にアクセスしたりできます。
sudo -i コマンド引数
ただし、そこでは機能しませんが、で使用できるようにする場合は、簡単に関数に変換できますsudo -i
。
完全な分析と詳細については、以下をお読みください。
ここにはいくつかの問題があります。いくつかはsudoの動作に、いくつかはbash自体の動作に...
デフォルトでsudo
は、はコマンドのみを検索してシェルをバイパスするため、単純に実行sudo ll
するとll
、のいずれかのディレクトリに実行可能ファイルがある場合にのみ機能し$PATH
ます。したがって、エイリアス(または関数)を使用するには、プロセスの一部としてシェルが呼び出されるようにする必要があります。
一つの方法は次のように実行するだろうsudo sh
か、sudo bash
現代的なのに、sudo
(私はsudoのを1.8.19p1でこれをテストしています)のオプションを持っている-s
し、-i
その目的のために。
したがって、1回の試行は次のようなものになりますsudo -s ll
(これはsudo bash -c 'll'
、$SHELL
Bashであると想定した場合と同じrcfile
です。起動ファイルを読み込まない非ログインモード。基本的には、シェルスクリプトを記述し#!/bin/bash
て実行する場合と同じです。あなたが持っているエイリアス(と関数)~/.bashrc
はそのスクリプトからアクセスできません...
その次は、-i
ログインシェルを作成するオプションです。それはあなたのスタートアップファイルを読むので、それはより有望です!それでも、sudo -i ll
(と同等sudo bash -l -c 'll'
)はまだ機能しません。それで、エイリアスの定義を読んだ場合、それはどのように可能ll
ですか?
さて、ここでの次の説明は、シェルがインタラクティブである場合を除いて、デフォルトではbashはエイリアスを展開しないということです... sudo -i
(またはbash -l
)で開始されるこのシェルはログインシェルですが、まだインタラクティブではありません。
次のステップは得ることですので、対話型、シェル、作品を:
sudo bash -i -c 'll'
(もちろん、ログインとインタラクティブの両方を使用しても問題ありませんbash -l -i -c ...
。)
別の方法としては、ログインシェル(非対話型)を使い続けるが、エイリアスを展開するよう明示的に要求するので、これも機能します。
sudo bash -l -O expand_aliases -c 'll'
(bashがインタラクティブだった場合は、初期化ファイルを読み取るのに十分なため、ログインシェルは必要ありませんでしたが、これ-l
はそれらを読み取る必要があります。)
これらはかなり長いコマンドラインです。また、シェルコマンド全体を引用符で囲む必要があるため、引数を使用してエイリアスを呼び出す場合は、すべてを文字列に変換する必要があります...なので、使いにくい...
以前、私はエイリアスと関数について話していたことに注意してください...関数は実際にはここではるかに便利なので、それは意図的でした。シェルで関数を実行するために、それらの定義を入手している限り、特別なこと(対話型シェルを使用する、特定のオプションを設定するなど)は必要ありません。
したがって、エイリアスの代わりに関数ll
として定義した場合、sudoのショートカットで直接使用できます。-i
sudo -i ll
また、引数付きの長いコマンドラインがある場合は、ここでも直接渡すことができます。
sudo -i ll -C -R /etc
(と比較してくださいsudo bash -i -c 'll -C -R /etc'
。)
また、関数ははるかに柔軟性が高く、通常は保守が簡単です。通常、エイリアスを関数に変換するのは簡単です。唯一の注意点は、"$@"
追加の引数を取ることが期待される場所で常に使用することです(通常、エイリアス。)
たとえば、次のエイリアス:
alias ll='ls $LS_OPTIONS -l'
この関数に変えることができます:
ll () {
ls $LS_OPTIONS -l "$@"
}
これらは、ほとんどの目的で同等です。また、前述のように、関数はから直接アクセスできる必要があるsudo -i
ため、追加のボーナスになります。
この回答と説明がお役に立てば幸いです。
/root/.bashrc
いますが、実際にはQはこのファイルのエイリアスです-これはこれでは不可能です-unix.stackexchange.com/questions/1496/…。