web-dev-qa-db-ja.com

ユーザーがグラフィカルセッションでログインしていて、同じユーザーがスクリプトを実行しているかどうかを確認するにはどうすればよいですか。

とりわけgsettingsコマンドを使用するbashスクリプトがあります。このコマンドが機能するためには、ユーザーがグラフィカルセッションでログインする必要があり、明らかに、スクリプトをそれ自体(つまり、rootではない)として実行する必要があるように思えます。

TERM変数を調べることで、グラフィカルターミナルを使用しているかどうかを確認できますが、スクリプトの実行者がグラフィカルセッションでログインしているユーザーと同じであることを確認するにはどうすればよいですか?

2
tjespe
  • ログインしているユーザーを確認するにはwho を使用できます。

  • スクリプトを実行したユーザーを確認するには:

    ps aux | grep $0 | awk '{ print $1 }' | uniq
    

    ps aux:最初の列に、各ユーザーを含む実行中のすべてのプロセスをリストします。

    grep $0:現在のスクリプトを検索します

    awk '{ print $1 }':最初の列にあるものだけを印刷します

    uniq:重複の可能性を削除します

  • スクリプトを実行したユーザーがログインしたユーザーと同じかどうかを確認するには

    LOGED_USER=$(who | awk '{ print $1 }') 
    EXEC_USER=$(ps aux | grep $0 | awk '{ print $1 }' | uniq)
    
    if [ $LOGED_USER == $EXEC_USER ]; then
          echo "Same USER"
    else 
          echo "Different USER"
    fi
    
1
M. Becerra