![스크립트를 실행하면 쉘이 종료됩니다. 왜? [폐쇄]](https://linux55.com/image/160538/%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%98%EB%A9%B4%20%EC%89%98%EC%9D%B4%20%EC%A2%85%EB%A3%8C%EB%90%A9%EB%8B%88%EB%8B%A4.%20%EC%99%9C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
저는 집에서 온라인으로 찾은 다음 스크립트를 실행하고 있는데, 실행할 때마다 읽기 프롬프트에 응답을 제공하면 셸이 종료됩니다. bg에서 스크립트를 실행하면 다음 메시지가 나타납니다. Bash: [답변]: 명령을 찾을 수 없습니다. 왜 이런 일이 발생합니까? 나는 보통 스크립트가 사용하는 디렉토리에서 실행합니다..
편집: 스크립트를 실행했는데 bash
예상대로 작동했습니다. 왜 그런 차이가 있는지 설명할 수 있는 사람이 있나요?
#!/bin/bash
echo "Enter 1 or 2, to set the environmental variable EVAR to Yes or No"
read ans
# Set up a return code
RC=0
if [ $ans -eq 1 ]
then
export EVAR="Yes"
else
if [ $ans -eq 2 ]
then
export EVAR="No"
else
# can only reach here with a bad answer
export EVAR="Unknown"
RC=1
fi
fi
echo "The value of EVAR is: $EVAR"
exit $RC
답변1
답변하신 내용과 거의 같습니다슈퍼유저에 대한 다른 동일한 질문.
.
(또는)을 사용하여 쉘 스크립트를 실행하면 source
대화형 쉘의 컨텍스트에서 실행됩니다. 따라서 쉘이 exit
명령을 실행하면 대화형 쉘이 종료됩니다.
쉘 스크립트를 실행하는 올바른 방법은 .
(또는 source
)을 사용하는 것이 아니라 실행 가능하게 만든 다음 다른 응용 프로그램처럼 실행하는 것입니다. (첫 번째 줄은 으로 시작하고 #!
스크립트의 인터프리터를 정의합니다. 제 예에서는 그렇습니다만 /bin/bash
스크립트를 읽을 수 있는 모든 것이 될 수 있습니다.)
다음은 다음과 같은 스크립트의 실제 예입니다 tryit
.
# Create a trivial shell script called "tryit"
cat >tryit <<'X'
#!/bin/bash
echo "This is my shell script"
exit 0
X
# Make it executable
chmod +x tryit
# Now run it (the "./" prefix means "in the current directory")
./tryit
tryit
스크립트를 디렉터리에 넣으면 접두사 $PATH
는 필요하지 않습니다(사용해서는 안 됩니다) ./
. 이것은 예이다
# Create applications (bin) directory and add to PATH for this session
mkdir -p "$HOME/bin"
export PATH="$HOME/bin:$PATH"
# Move the "tryit" application to the bin directory
mv tryit "$HOME/bin"
# Now we can run it just like any other application
tryit
이런 방식으로 스크립트를 실행할 때는 현재 대화형 셸에서 환경 변수를 설정할 수 없다는 점을 지적하고 싶습니다.이것을 할 수 있어야 해.
또는 을 계속 사용해야 합니다 source
. 이 경우 스크립트가 대화형 컨텍스트에서 실행되기 때문에 기억해야 합니다.기필코 아니다어디에든 성명을 포함시키세요 exit
.