[〜#〜] euid [〜#〜]は[〜#〜] uid [〜#〜]と同じではありません。これらはどちらもスクリプトでどのコンテキストで使用されていますか?
echo "UID is $UID and EUID is $EUID"
で値を取得しようとしましたが、出力としてスペースのみが表示されました。私のマシンはUbuntu 12.04 LTSを実行しています。一部のサイトでは、これが通常はrootユーザーであるかどうかを確認するために使用されており、適切な違いを得ることができないことが確認されています。
ダッシュではなく、bashでのみ機能します(Debianベースのディストリビューションでは、Ubuntu shは通常ダッシュへのシンボリックリンクであるため)。
スクリプトをインタラクティブに実行している場合、デフォルトのシェルとしてbashが構成されていない可能性があります。試す前にbash
を実行してください。
コンソールから実行している場合:
bash script.sh
パスを使用して実行している場合(例:./script.sh
)スクリプトの最初の行が次のとおりであることを確認します。
#!/bin/bash
そしてない:
#!/bin/sh
それを行うより一般的な方法については、次を確認してください: https://askubuntu.com/questions/15853/how-can-a-script-check-if-its-being-run-as-root
その投稿では、コマンドid
が言及されています。
id -u # is the EUID
id -u -r # is the UID
プログラムがset-uidを実行している場合は異なります。実効UIDは変更後のユーザー、UIDは元のユーザーです。