0이 아닌 코드로 종료되는 터미널의 모든 명령은 터미널 창을 닫습니다.


22

처음에는 "Bash Roulette"를 연주하는 것과 같이 약간 재미있었습니다.하지만 이제는 오래되었습니다.

0이 아닌 코드로 종료되는 터미널의 모든 명령은 터미널 창을 닫습니다.

아마도 set -e터미널 터미널이있는 어딘가에 bash 스크립트를 설정 했다고 들었습니다 .

나는 확인했다 .bash_profile/ .bashrc/ .profile및처럼은 보이지 않는 set -e존재입니다.

다른 명백한 범인이 있습니까?


7
를 실행 set +e하면 문제가 해결됩니까? 그렇다면 내가 생각하는 것을 계속 찾아야합니다 set -e. 이 파일의 전역 버전은 아래 /etc에 있거나 소스에서 제공 한 다른 스크립트에있을 수 있습니다. 문제가 해결되면 구성 파일을 멀리 옮기고 작은 덩어리로 줄을 다시 추가하여 끊어진 부분을 확인하십시오.
egmont

3
PS4=' ${BASH_SOURCE}:$LINENO: ' bash -lixc true |& grep -e set -e trap유익 할 수 있습니다.
muru

다음 -과 같은 특수 변수를 사용하여 현재 활성화 된 쉘 플래그 세트를 검사 할 수 있습니다 echo $-.
David Foerster

답변:


21

참으로 참으로 set -e문제가되었습니다.

내가 찾은 방식 set -ebash -lx

가장 좋은 방법은 다음을 사용하는 것입니다.

bash -lx > lx.log 2>&1

그런 다음 해당 로그 파일을 열고 검색하십시오 set...

일단 당신이 그 길을 찾으면 그 set -e줄을 제거 할 수 있으며 문제는 사라져야합니다! (기계를 다시 시작하는 것이 좋습니다.)

필자의 경우 set -e.bash_profile이 소스 파일에 있지만 행은 .bash_profile 자체에 없었습니다.


3
source쉘에서 안전한 것은 "무작위 쉘 스크립트"보다 훨씬 작습니다. -e바보 같은 오류 검사를 위해 실제 스크립트에서 유용 할 수 있습니다. (또는 오류를 확인하는 것을 잊지 않았는지 확인하십시오 .)
Peter Cordes

분명히 사건 것을 ... 내가 좋아하는 무언가가 있었으면 global set -e그 때문에 set -e에만 포함 된 스크립트에 영향을 미치는
알렉산더 밀스

@AlexanderMills,이를 위해 $-내부 스크립트에서 플래그를 확인하고 마지막에 상태를 복원하거나 소스 스크립트를 설정했다는 사실을 알고있는 경우 기본 스크립트에서 재설정 할 수 있습니다.
ilkkachu

그래서 local set -ebash 함수에서만 사용할 수 있다고 생각 합니까?
Alexander Mills

13

그냥 문제를 해결하려면 포함 set +e당신에 .bashrc- 상기 끝.

파고 갈 수 있습니다. 다른 곳이 많을 set -e수도 있지만 그 일을 많이 처리 할 것입니다.

그러나 set -e가 귀하의 일부인 $PROMPT_COMMAND경우 위의 내용이 작동하지 않습니다. printf '%s\n' "$PROMPT_COMMAND"그 안에 무엇이 있는지 보십시오 .


내 컴퓨터에 내가 터미널, 열 때 printf '%s\n' "$PROMPT_COMMAND"단지 공백, 아무것도 수율
알렉산더 밀스

@AlexanderMills, 그것은 당신의 문제가 아닙니다. 한 가지 일반적인 용도 $PROMPT_COMMAND는 터미널 탭 이름 또는 창 이름을 업데이트하는 것입니다. MacOS X와 ​​Ubuntu는이 작업을 수행합니다. Mac 용 데이터에 대해서는 apple.stackexchange.com/q/220641/151730 을 참조하십시오 .
와일드 카드

나는이 문제에 대한 답을 발견하고 내 자신의 대답을 추가 set +e그것이 아마도 때문에,하지 작업을했던 set -e 내 소싱 bash는 파일의 호출.
Alexander Mills

1
@AlexanderMills, 예, 나는 그것이 암시 적이라고 생각했습니다. 나는 의미 추가 set +e 당신에게 .bashrc이 아닌 시작에 넣어. 나는 지금 내 대답에 그것을 명시 적으로 만들었습니다. 소스를 찾았습니다.
와일드 카드

그래, set +e그냥 반창고는 분명,하지만 당신은 언급이
알렉산더 밀스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.