
나는 나 자신을 발견했다. 스크립트를 작성하고 에서 호출한 후 루트에 로그인할 수 없습니다 ~/.bashrc
.
~/.bashrc:
#... do stuff then run my script
source ~/myscript.sh
~/myscript.sh:
#!/bin/bash
if [myConditional]; then
exit
fi
# otherwise do stuff
내가 바랐던 것은 루트로 로그인하면 myscript.sh가 실행되고 myConditional이 true인 경우 myscript.sh가 더 이상의 명령 실행을 중지하지만 .bashrc로 돌아가서 사용자가 계속 로그인되어 있기를 바랐습니다. 평소처럼 루트로. 하지만 그 대신 exit
로그인이 전혀 불가능해졌습니다! 방금 로그인 프롬프트로 돌아왔습니다.
외에 사용해야 하는 다른 명령이 있나요 exit
? 분명히 문 if
을 만들고 else
제거하여 문 을 확장할 수 있지만 exit
교육 목적으로 더 적절한 접근 방식이 있는지 알고 싶습니다. (부분적으로 깊게 중첩된 문을 피하고 싶기 때문에 if
꽤 큰 스크립트가 될 수 있습니다)
답변1
source filename.sh
(또는 . filename.sh
)은 다음의 내용을 실행합니다.filename.sh
현재 통역사에서(본질적으로 해당 시점에 내용을 복사한 것과 같습니다.) 결과적으로 exit
해당 인터프리터를 종료합니다.
스크립트를 별도의 프로그램으로 실행하려는 경우에는 사용하지 마십시오 source
. ~/myscript.sh
먼저 를 사용하여 실행 가능하게 만들면 스크립트가 실행되거나 원하는 경우 chmod +x ~/myscript.sh
사용할 수 있습니다 . bash ~/myscript.sh
마치 시스템의 다른 프로그램인 것처럼 스크립트를 실행하기 위해 새 셸이 시작됩니다.
반면에 source
스크립트에 정말로 의미가 있는 경우(예를 들어 환경 변수를 설정하기 때문에) 영향을 주지 않고 파일의 나머지 부분 .bashrc
과 이를 실행한 셸의 실행을 중지할 수 있습니다.사용하여return
:
return
.
(source
) 내장 으로 실행 중인 스크립트의 실행을 종료하는 데 사용될 수도 있습니다 .n
또는 스크립트 내에서 실행된 마지막 명령의 종료 상태를 스크립트의 종료 상태로 사용합니다.
이 경우 myscript.sh
파일에는 다음이 포함됩니다.
if [[ condition ]]
then
return 0
fi
원하는 효과로.