스크립트를 종료하면 쉘이 닫힙니다.

스크립트를 종료하면 쉘이 닫힙니다.

쉘스크립팅을 배우고 있습니다. 내 플랫폼은 Debian 10 클라우드 서버입니다. 다음 스크립트를 테스트 중입니다.

#!/bin/bash
echo This script will exit with an exit status of 0.
exit 0

실행하면 세션이 종료됩니다! 즉, 터미널 창이 사라집니다.

제가 이해한 바에 exit따르면 쉘 스크립트 내에서 실행하면 전체 세션이 종료되는 것이 아니라 스크립트만 종료됩니다. 어쩌면 데비안 10이 이 패턴에서 벗어날 수도 있나요? 그렇다면 Debian 10의 쉘 스크립트에서 값을 어떻게 반환합니까?

답변1

배쉬 매뉴얼 페이지:

 .      filename [arguments]
 source filename [arguments]

   Read and execute commands from filename in the current shell environment...

여기서 "조달"은 매우 일반적인 용어입니다. 이는 마치 한 줄씩 입력한 것처럼 스크립트 파일의 명령을 실행하는 것을 의미합니다. 동일한 bash에 머물면서 여전히 모든 변수와 설정을 유지합니다.

"실행" 스크립트에는 정의가 포함됩니다.어떻게정확히. 일반적으로 통역사를 부르게 됩니다. bash script.sh좋다 perl script.pl. 접미사는 중요하지 않습니다. 중요한 것은 첫 번째 줄 "binfmt": #!...: ./script또는 script($PATH에 있는 경우)만 있으면 된다는 것입니다.

. script(구입)

./script("실행", +x 필요)

기술적으로는 다릅니다.


지옥처럼어떤 의미에서는 "전체" 세션입니다. Ctrl-D도 비슷한 효과를 갖습니다. 제어 가능하지만 대화형 셸은 스크립트와 같기 때문에 논리적입니다.

노력하다

]# ps  
  PID TTY          TIME CMD
18768 pts/1    00:00:00 ps
18994 pts/1    00:00:00 bash
]# bash
]# bash
]# ps
  PID TTY          TIME CMD
18780 pts/1    00:00:00 bash
18781 pts/1    00:00:00 bash
18782 pts/1    00:00:00 ps
18994 pts/1    00:00:00 bash
]# exit
exit
]# exit
exit
]# ps
  PID TTY          TIME CMD
18784 pts/1    00:00:00 ps
18994 pts/1    00:00:00 bash
]# 

...한 쉘을 다른 쉘 위에 쌓고 종료하는 방법을 알아보세요.

그것은 모두 프로세스와 작업에 관한 것입니다.

답변2

@steeldriver 님 말씀이 맞습니다. 다음 명령 중 하나를 사용하여 스크립트를 실행하면 예상대로 작동합니다.

./ex01.sh
sh ex01.sh
bash ex01.sh

인용하다:

https://www.cyberciti.biz/faq/run-execute-sh-shell-script/

관련 정보