현재 쉘에서 특정 작업을 수행하는 방법

현재 쉘에서 특정 작업을 수행하는 방법

현재 셸에서 실행할 수 있는 bash 스크립트 또는 유사한 스크립트를 만들고 싶습니다.

 echo '#!/bin/bash 
  export foo="bar" ' > zoom.sh

하지만 현재 프로세스에서 이 스크립트를 실행하려면 다음을 수행하세요.

exec ./zoom.sh

그런 다음 내 터미널은 "Process Completed"로 종료되며 를 사용하더라도 set +e여전히 종료됩니다.

그리고 현재 셸에서 작업을 실행하는 source것은 evaleval이 최선의 선택일까요? bash 기능은 작동합니다. 하지만 source먼저 이를 사용하려면 사용자에게 의존해야 합니다.

답변1

매뉴얼에 따르면 exec는 새 프로세스를 생성하지 않고 현재 셸을 교체할 뿐이므로 실행 후 세션도 종료합니다.

exec [-cl] [-a name] [command [arguments]]:
명령을 지정하면 쉘을 대체합니다. 새로운 프로세스가 생성되지 않습니다. 이러한 매개변수는 명령의 매개변수가 됩니다. -l 옵션이 제공되면 쉘은 명령에 전달된 0번째 인수의 시작 부분에 대시를 배치합니다. 이것이 login(1)이 하는 일입니다. 이 -c옵션을 사용하면 명령이 빈 환경에서 실행됩니다. 제공된 경우 -a쉘은 이름을 실행된 명령의 0번째 인수로 전달합니다. 어떤 이유로 명령을 실행할 수 없는 경우, 쉘 옵션이 활성화되어 있지 않으면 비대화형 쉘이 종료되며 execfail, 이 경우 실패를 반환합니다. 파일을 실행할 수 없으면 대화형 셸은 실패를 반환합니다. 명령을 지정하지 않으면 모든 리디렉션이 현재 셸에 적용되고 반환 상태는 0입니다. 리디렉션 오류가 있는 경우 반환 상태는 1입니다.

$ cat zoom.sh
#!/bin/bash
export foo="bar"
echo $?
$ exec ./zoom.sh
0
Connection to localhost closed

관련 정보