2009-10-29 18 views
11

私はいくつかのソフトウェアをインストールするbashスクリプトを持っています。ルートで実行されていない場合、できるだけ早く失敗したい。どうやってやるの?bash:スクリプトがルートで実行されていないと失敗します。

+1

は:*許可が失敗するまで、それが実行してみましょう。*;現在のユーザーとして操作を正常に実行できるようにシステムを設定し、このオプションを強制的に取り除くことで[これまで同様の前提条件を設定したスクリプトを修正する必要がありました]。一方、私はroot権限で実行すると大量の警告を表示したり表示したりするような事件のほうがはるかに多い。 –

+0

sudoを試してみてください。 linuxの下で、何かをインストールするときには、通常のユーザがシステムを傷つける可能性のあるものをインストールするのを防ぐためにrootにする必要があります。 – masterLoki

+1

彼は、自分のスクリプトが忘れてしまったり、sudo(またはその他の特権エスカレーション手段)。他のことをしようとする前にランタイムの正気をチェックするのは良い習慣です。 –

答えて

27
#!/bin/bash 
if [ "$(id -u)" != "0" ]; then 
    echo "This script must be run as root" 1>&2 
    exit 1 
fi 

出典:http://www.cyberciti.biz/tips/shell-root-user-check-script.html

+0

またはそれを短く保つために、UID env: を確認してください。[[$ UID -ne 0]]; – zlack

+1

@zlack $ UIDは、スクリプトが 'sudo'で実行されている場合は元のユーザーのUIDを与え、Davidはスクリプトをrootとして実行していると見なします。あなたがやっていることに応じて、おそらくダビデは良いでしょう。 – pr1001

+0

pr1001によれば、ユーザーがsudoを使ってスクリプトを実行している場合、UIDは機能しませんが、EUIDは正常に動作します。 – Tom

5

これに周り掘った後、コンセンサスがEUID(実効ユーザID)変数が設定されるようにbashでid -uを使用する必要がないことのようです。 UIDとは対照的に、EUIDは、ユーザがrootまたはsudoの場合は0になります。どうやら、これはid -uを実行しているよりも約100倍高速である:

#!/bin/bash 
if ((EUID != 0)); then 
    echo "You must be root to do this." 1>&2 
    exit 1 
fi 

出典:私は*一般*この愚かな行動を検討するが、https://askubuntu.com/questions/30148/how-can-i-determine-whether-a-shellscript-runs-as-root-or-not

+2

これはBourneシェルでは機能しません。厳密にPOSIX準拠のソリューションはありますか? –

関連する問題