스크립트를 작성하고 에서 호출한 후에 루트로 로그인할 수 없다는 사실을 깨달았습니다 ~/.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
원하는 효과를 얻으세요.