bash -c가 완료된 후 대화형 쉘을 유지하는 방법은 무엇입니까?

bash -c가 완료된 후 대화형 쉘을 유지하는 방법은 무엇입니까?

$SHLVL쉘 호출 설정을 인쇄하는 장난감 스크립트가 있습니다 .

$ cat tst.sh 
echo "Level: $SHLVL"
echo "Options: $-"

source현재 셸에 있으면 예상대로 작동합니다.

$ source tst.sh 
Level: 1
Options: himBHs

서브쉘에 있다면 sourced별로 흥미롭지 않습니다.

$ /bin/bash
$ source tst.sh 
Level: 2
Options: himBHs

설정을 사용하여 실행하면 -c약간 다른 결과가 나타납니다.

$ /bin/bash -c 'source tst.sh'
Level: 2
Options: hBc

따라서 누락된 옵션을 제공합니다.

$ /bin/bash -sic 'source tst.sh'
Level: 2
Options: himBHcs

sourced내 스크립트가 이 설정을 사용할 때마다 -c스크립트의 마지막 명령을 완료한 후 하위 쉘이 종료됩니다. 이는 내가 방지하고 싶은 것이므로 스크립트의 마지막 명령 이후 interactive하위 쉘 에 남아 있어야 합니다.

기본적으로 다음 단계 순서를 복제하고 싶지만 다음을 사용합니다 -c.

$ /bin/bash
$ source tst.sh

답변1

어쩌면 보기보다 간단할 수도 있습니다.

bash --init-file tst.sh

또는

bash --rcfile tst.sh

답변2

이를 바탕 으로 --init-fileUp + Enter를 눌러 기록에서 명령을 다시 실행할 수 있습니다.

echo 'pwd; ls' >/tmp/hist
HISTFILE=/tmp/hist bash --init-file /tmp/hist

관련 정보