현재 쉘에서 무언가를 실행하는 방법

현재 쉘에서 무언가를 실행하는 방법

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

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

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

exec ./zoom.sh

그러면 내 터미널은 "프로세스 완료"를 종료합니다. 를 사용하더라도 set +e여전히 종료됩니다.

현재 셸에서 작업을 실행하는 항목이 있으므로 eval이 최선의 방법 source일까요 ? evalbash 기능은 작동하지만 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

관련 정보