떠나기 전에 질문을 받고 싶다면:

떠나기 전에 질문을 받고 싶다면:

모든 사용자에 대해 자동으로 실행되는 bash 스크립트를 설정해야 합니다.

"처리 완료"시 터미널 설정이 종료되도록 설정할 수 없습니다. 터미널을 "모두 종료"할 수는 없습니다.

누구든지 방법을 알고 있나요? 내 생각에는 PID 솔루션(부모 PID가 아님)이 좋은 접근 방식이 될 것 같습니다.

사용된 운영체제는 MacOS Sierra입니다.

테스트 파일

#!bin/bash
currentUser=$(whoami)
mkdir -p ~/Desktop/Pdrive
mount_smbfs //server/UserData/$currentUser ~/Desktop/Pdrive


#pid=$$
#kill $pid
#exit 0
#kill -15 $$
#disown
#kill -9 $(ps -p $(ps -p $PPID -o ppid=) -o ppid=)
#osascript -e 'tell application "Terminal.app" to quit'
#pkill -f test.sh
exit

답변1

이 시도:

떠나기 전에 질문을 받고 싶다면:

osascript -e 'tell application "Terminal" to close first window' 

묻지 않고 떠나십시오:

osascript -e 'tell application "Terminal" to close first window' & exit

다른 Unix 버전에서는 다른 작업을 수행하므로 killall사용 하지 마십시오 .killall

답변2

source다음을 사용하여 현재 셸에서 스크립트를 실행할 수 있습니다 ..

. ./test.sh

이렇게 하면 스크립트가 호출될 때 exit쉘도 종료됩니다. 이로 인해 터미널 에뮬레이터도 닫힙니다.

그러나 이는 기본 설정의 macOS 터미널에서는 작동하지 않지만 환경 설정 → 프로필 → 셸 → "셸이 종료될 때"로 이동하여 "창 닫기" 또는 "셸이 완전히 종료되면 닫기"를 선택할 수 있습니다.

답변3

Linux 및 macOS에 대한 좀 더 일반적인 내용은 다음과 같습니다.

#!/bin/bash -e

function kill_self_terminal {
  local tk_child_pid=$1
  if [[ $tk_child_pid == 1 ]]; then
    return 1
  fi
  local tk_parent_pid=$(ps -p $tk_child_pid -o ppid=)
  if [[ $tk_child_pid == $tk_parent_pid ]]; then
    return 1
  fi
  local tk_parent_command=$(ps -p $tk_parent_pid -o comm= | tr '[:upper:]' '[:lower:]')
  if [[ -n $tk_parent_command ]] && [[ $tk_parent_command == *term* ]]; then
    kill $tk_parent_pid
  else
    kill_self_terminal $tk_parent_pid
  fi
}

kill_self_terminal $$ || {
  echo "Unable to find terminal to close"
}

다른 터미널 명령을 사용하는 경우 tk_parent_command 확인을 다음으로 변경하십시오.학기부분

중요한:저는 Debian Linux 12를 사용하고 있으므로 이것이 macOS에서 작동하기를 바랍니다. 스크립트 조정 방법을 알려주세요.

관련 정보