シェルスクリプトによるログアウト

シェルスクリプトによるログアウト

私はシェルスクリプトを通していくつかのことをしています。スクリプトが成功した場合は続行し、そうでない場合は現在のユーザーをログアウトします。現在、ユーザーをログアウトする方法が見つかりません。終了を試してみましたが、シェルではなく現在のプロセスで終了しているようです。 PS:ユニバーサルユーザーなので、そのユーザーを介して実行されるプロセスが多いため、pkillを使用して現在のユーザーのセッションを終了することはできません。また、このユーザーはユニバーサルユーザーであるため、他のチームメンバーがこのユーザーを介してシステムにログインでき、そのセッションが終了する可能性があります。

答え1

スクリプトが実行されているのと同じシェルの場合は、source新しいプロセスとして実行するのではなく直接使用でき、exit正常にログアウトされます。

つまり、あなたの代わりに./script.shしてくださいsource ./script.sh。この違いが発生するのは、ソースが現在のシェルにファイル内のコマンドを実行させるシェル組み込みであるためです。ソースなしでスクリプトを実行すると、スクリプトを実行するための新しいプロセスが作成されるため、終了してもシェルは終了しません。

答え2

alias exit='./your_script && exit'

答え3

まず、答えを始める前に、いくつかの基本事項を明確にしましょう。

AFAIK

  1. 端末には1つのログインシェルしかありませんが、複数のユーザーが非ログインシェルを持つ同じ端末を使用できます。
  2. このログインシェルはTTYまたはPTS(ttyとptsの違い)
  3. ログインシェルには他の非ログインシェルがあります(ログイン/非ログインシェルとは何ですか?)
  4. exit非ログインシェルを終了するために使用されます(logout非ログインシェルでは終了できません)。
  5. logoutTTYを終了するために使用されます(logoutログインシェルでのみ使用可能)。
  6. ログインしている端末かログインしていない端末かを確認する方法

TTYを使用する場合

(./your_script && <task_you want_to_continue>) || logout

または

(./your_script && <task_you want_to_continue>) || exit

PTSにいる場合

(./your_script && <task_you want_to_continue>) || who -u; 
echo 'enter PID of login shell user you want to logout'; read PID; kill $PID;

上記の回答のソース

"<"と">"タグを削除し、タスクを上記のスクリプトに入れます。

理由はわかりませんが、PTSで作業してもlogoutTTYexitと同じようには機能しませんが、これが問題を解決することを願っています。

私はLinuxを4ヶ月ほど使ってきたので、その基準で見るとニュービーといえます。エラーが見つかった場合は、回答を改善していただきありがとうございます。

答え4

次のコマンドを試してください。

killall gnome-session

関連情報