2

ログイン時にgit-pullを実行するスクリプトがあります。問題は、別のユーザーにsuを実行し、su -lpを使用して環境を維持すると、スクリプトが再度実行され、通常、さまざまな理由で混乱することです。私は間違ったユーザーです。私が現在訴訟を起こしているかどうかをシェルスクリプトで判断する方法はありますか?現在の解決策である、ユーザー名をスクリプトにハードコーディングする必要のない方法を探しています。シェルとしてBashとZSHを使用しています。

4

5 に答える 5

4

whoコマンドの出力をidコマンドで使用できます。

WHO=`who am i | sed -e 's/ .*//'`
ID_WHO=`id -u $WHO`
ID=`id -u`
if [[ "$ID" = "$ID_WHO" ]]
then
    echo "Not su"
else
    echo "Is su"
fi
于 2010-01-20T16:27:26.993 に答える
0
テスト"$(id -u)"="0"の場合;
  :#rootに対して実行されるコマンド
そうしないと
  :#非ルートに対して実行されるコマンド
fi
于 2010-01-20T16:54:05.587 に答える
0

suid実行可能ファイルを使用してユーザーIDを変更する場合、実際の有効なユーザーIDは異なります。ただし、use su(またはsudo)を使用する場合は、両方とも新しいユーザーに設定されます。これは、getuid()またはgeteuid()を呼び出すコマンドが役に立たないことを意味します。

より良い方法は、スクリプトが実行されている端末の所有者を確認することです。プロセスがターミナルから切り離されている場合、これは明らかに機能しませんが、スクリプトがデーモンによって実行されていない限り、これは起こりそうにありません。試してみてくださいstat -c %U $(tty)who am iほとんどのUnixライクなOSでも同じことができると思います。

于 2010-01-20T17:47:58.510 に答える
0

「$UID」環境変数を使用できます。

その値がゼロの場合、ユーザーはSUDO ed ..Bcosrootを$UID==0として使用しています。

于 2010-01-23T12:07:52.113 に答える
-2

ええと....Linuxでは、別のユーザーにsuすると、プロセスsuは新しいユーザーのプロセスリストに含まれます。

sudo...そんなに楽しいものをあなたに残しません。

私はzshを使用しています...しかし、これにはシェル固有のものはないと思います。

もしも:

%ps | grep "su $"

何かを返すと、su'dシェルで実行されます。

注:su $の前には、単にsuで終わるコマンドを除外するためのスペースがあります。ただし、suと呼ばれるカスタムプログラム/スクリプトを防ぐことはできません。

于 2010-01-20T16:34:01.297 に答える