3つの機能を実行するスクリプトがありますA && B && C
。
この関数はB
スーパーユーザーとして実行する必要がありますが、そうではありませA
んC
。
いくつかの解決策がありますが、それらのどれも満足できません。
スクリプト全体をsudoしてください。
sudo 'A && B && C'
必要でない場合、スーパーユーザーとして
A
実行するのは悪い考えのようです。C
スクリプトをインタラクティブにします。
A && sudo B && C
パスワードを入力する必要があるかもしれませんが、各機能に時間がかかり、スクリプトが私を待たないため、スクリプトは非対話型であることを望みます。まあ、それが当初スクリプトだから実行されるのを見る必要がない理由です。
愚かな解決策:
sudo : && A && sudo -n B && C
まず、最初に無作為に実行するのは愚かなよう
sudo
です$sudo_timeout
。仮説的な解決策(それが存在すると言ってください):
sudo --store-cred 'A && sudo --use-cred-from-parent-sudo B && C'
最初はパスワードの入力を求められ、必要なときにのみ資格情報を使用します。
これらすべてについてどう思いますか?非常に一般的な問題だと思ったので、この問題に対する解決策がないという事実に驚きました(それはいかがですかmake all && sudo make install
)。
ベストアンサー1
パスワードを要求せずに実行できるようにするには、/etc/sudoers
この属性を持つファイルにスクリプトを追加します。NOPASSWD
特定のユーザー(またはユーザーグループ)にバインドしたり、sudo
システム内のすべての人が実行できるようにすることができます。
名前付きスクリプトのサンプル行は/usr/local/bin/bossy
次のとおりです。
ALL ALL = (root) NOPASSWD: /usr/local/bin/bossy
その後、次のようなものを使用します。
A && sudo bossy && C
PATH
この例ではincludeと仮定します/usr/local/bin
。そうでない場合は、スクリプトのフルパスを使用してください。sudo /usr/local/bin/bossy