난 터미널에서 떠들썩한 파티 스크립트를 소싱 그래서 함께 오류에 종료,
set -o errexit
터미널을 닫고 다른 터미널을 열고 일부 변수를 재설정해야하기 때문에 EXTREMELY ANNOYING 터미널을 죽입니다.
지금까지
command || return
스크립트에서 라인은 내가 원하는 것을 정확하게하고 있습니다.
set -o errexit
해야 할 일 ... 그러나 나는 전체 스크립트를 위해 그것을 원합니다. 한 줄 / 명령이 아니라
사이트를 설정하는 명령으로 가득 찬 파일이 있으며 명령 || 반환
파일의 모든 줄마다
터미널을 종료하는 대신 "복귀"할 다른 설정 옵션 또는 다른 옵션이 있습니까?
- 명확성 을 위해 스크립트를 종료하고 터미널에서 실행되는 서비스를 종료하기 위해 ctrl + C를 누르는 것과 동일한 상태로 터미널을 유지하고 싶습니다. command || return
것을 수행. 그러나 || return
파일의 모든 줄에 고정하고 싶지 않습니다 . 그래서 set -o errexit
터미널을 종료시키지 않는 비슷한 것을 찾고 있습니다.
--- 참고 : 두 줄이 포함 된 바보 스크립트 만들기 (super.sh) :
create_path=~/Desktop/site_builder/create.sh
source $create_path blah
set -o errexit
create.sh의 맨 위에 배치 하면
내가 예상대로 정확하게 작동합니다. 그러나 터미널에서 파일을 호출하는 대신 다른 bash 스크립트를 호출하기 위해 두 줄로 파일을 작성하는 것은 정말 어리 석습니다. 어 gg
다음은 몇 가지 예입니다.
super.sh에서
#!/bin/bash
create_path=~/Desktop/site_builder/create.sh
source $create_path blah
create.sh에서
#!/bin/bash
set -o errexit
#line below this is a line that fails and will cause the script to stop and return to the terminal as expected
sed "s/@@SITE_NAME@@/$dirname"
~/Desktop/site_builder/template_files/base.html > ~/Desktop/$dirname/templates/base.html # a line with a stupid error
터미널에서 :
$ bash super.sh
예상대로 출력 :
my-mac$
작동합니다. 정말 귀찮은 해결책입니다.
내가 원하는 날 아래 터미널 종료를하지 않고, D : 이상적으로, 터미널이 아닌 super.sh 파일에서 바보 super.sh 파일에 무엇이 실행. 이것은 내가하려는 일에서 일어나는 일입니다.
터미널 명령 :
my-mac$ source $create_path blah
create.sh에서 나는 여전히 set -o errexit
다음은 터미널의 출력입니다
sed: 1: "s/@@SITE_NAME@@/blah": unterminated substitute in regular expression
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
[Process completed]
그런 다음 터미널이 고정됩니다. Ctrl + C가 작동하지 않으며 Ctrl + D도 작동하지 않습니다
대신 create.sh 파일의 모든 곳에서 명령문을 set -o errexit
사용 command || return
하면 터미널에서 직접 supser.sh의 행을 실행하는 동안 터미널에서 supser.sh의 행을 실행하는 동안 원하는 것을 정확하게 얻을 수 있습니다. 그러나 그것은 실제적인 해결책이 아닙니다.
참고 : 나는 자식 쉘을 생성하는 것에 대한 @terdon의 대답을 좋아했기 때문에 터미널 대신 스크립트를 통해 하위 쉘을 생성하는 것을 끝내 었습니다. 그는 ( )
전체 스크립트 주위에 중괄호를 사용하여 자신의 답변에 표시했습니다 . 작동합니다.
source $file_path argument
스크립트는 내가 호출 한 것과 동일한 쉘에서 실행되고 있습니다 (무엇을 source
들었 command || return