쉘 스크립트를 통한 로그아웃

쉘 스크립트를 통한 로그아웃

쉘 스크립트를 통해 일부 작업을 수행하고 있습니다. 스크립트가 성공하면 계속하고, 그렇지 않으면 현재 사용자를 로그아웃합니다. 현재 사용자를 로그아웃하는 방법을 찾을 수 없습니다. 종료를 사용해 보았으나 쉘이 아닌 현재 프로세스에서 종료되는 것 같습니다. 추신: 범용 사용자이기 때문에 해당 사용자를 통해 실행되는 프로세스가 많기 때문에 pkill을 사용하여 현재 사용자의 세션을 종료할 수 없습니다. 또한 이 사용자는 범용 사용자이므로 다른 여러 팀 구성원이 이 사용자를 통해 시스템에 로그인할 수 있으며 이로 인해 해당 세션이 종료될 수도 있습니다.

답변1

스크립트가 실행 중인 것과 동일한 셸인 경우 source새 프로세스로 실행하는 대신 직접 사용할 수 있으며 exit성공적으로 로그아웃됩니다.

즉, 귀하를 대신 ./script.sh하여 수행하십시오 source ./script.sh. 이러한 차이가 발생하는 이유는 소스가 현재 쉘이 파일의 명령을 실행하도록 하는 쉘 내장이기 때문입니다. 소스 없이 스크립트를 실행하면 스크립트를 실행하기 위해 새 프로세스가 생성되므로 종료해도 쉘이 종료되지 않습니다.

답변2

alias exit='./your_script && exit'

답변3

먼저 답변을 시작하기 전에 몇 가지 기본 사항을 명확히하겠습니다.

AFAIK

  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에서 작업하는 logout것이 exitTTY에서처럼 작동하지 않지만 이것이 문제가 해결되기를 바랍니다.

저는 리눅스를 4개월 정도 사용해왔기 때문에 그 기준으로 보면 뉴비라고 할 수 있겠습니다. 오류가 발견되면 답변을 개선해 주시면 감사하겠습니다.

답변4

다음 명령을 시도해 보세요.

killall gnome-session

관련 정보