쉘스크립팅을 배우고 있습니다. 내 플랫폼은 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/