모든 사용자에 대해 자동으로 실행되는 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에서 작동하기를 바랍니다. 스크립트 조정 방법을 알려주세요.