
Bash 인터프리터 자체에는 옵션이 있습니다.
예를 들어, 22-23행에 언급된 내용은 다음과 같습니다.배쉬 매뉴얼 페이지:
옵션
세트 내장 명령 설명에 문서화된 모든 단일 문자 쉘 옵션은 쉘을 호출할 때 옵션으로 사용될 수 있습니다. 또한 bash는 호출 시 다음 옵션을 해석합니다:
-c ...
-i ...
-l ...
-r ...
나는 Bash 매뉴얼 페이지에서 몇 가지 검색 패턴을 사용합니다. 예를 들면 다음과 같습니다.
/^\s*set
/list
현재 쉘에 적용되는 이러한 설정 목록을 인쇄할 수 있습니까?
답변1
printf %s\\n "$-"
단일 문자 옵션은 단일 문자열로 나열됩니다.
이 매개변수는 다음과 같이 사용할 수도 있습니다.
set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"
-f
in 값을 저장하는 동안 먼저 쉘 파일 이름 확장을 비활성화하십시오 . 다음에는 glob이 발생하지 않으며 마지막 파일 이름 확장자가 다시 활성화되거나 비활성화될 수 있습니다.$-
$1
+f
예를 들어 -f
파일 이름 확장자가 비활성화된 상태에서 값을 처음 저장 하면 $-
저장된 값은 다음과 같습니다.(적어도):
f
그래서 set
다시 실행하면 결과는 다음과 같습니다.
set +f -f
이것은 단지 당신이 시작한 곳으로 돌아가는 것입니다.
set +o
set
모든 테이블 셸 옵션을 나열합니다.(바라보다제이슨의 대답할 수 있는 사람들을 위해 shopt
- 그게 말이 되나요? - 옵션)쉘 재진입에 안전한 형태로 되어 있습니다. 이 방법으로 다음 작업도 수행할 수 있습니다.
state=$(set +o)
set -some -crazy -options
eval "$state"
쉘 옵션의 상태를 각각 저장, 변경 및 복원합니다.
shopt
이온 및 테이블 옵션을 한 번에 처리하려면 :set
state=$(set +o; shopt -p)
#do what you want with options here
eval "$state"
당신은 또한 전화할 수 있습니다set
아니요현재 쉘에 의해 설정된 모든 변수 목록을 추가하는 데 사용되는 인수는 쉘에 다시 들어가기 위해 인용될 수도 있습니다. 또한 bash에 이 명령을 추가하여 typeset -fp
현재 선언된 모든 셸 함수를 포함할 수도 있습니다. 준비가 되면 모든 것을 하나로 합칠 수 있습니다 eval
. alias
매개변수 없이 동일한 것을 더 많이 호출 할 수도 있습니다 . 하지만 이건... 가려질 수도 있어요. 제 생각에는 그렇게 하기 전에 "$@"
배열에 넣어야 한다고 생각합니다.bash
set
아니요, 아직 있습니다 trap
. 이건 좀 웃기네요. 대개:
trap 'echo this is my trap' 0
(echo this is my subshell; trap)
...인쇄만 가능이것은 내 서브 쉘입니다서브쉘은 새로운 프로세스이고 자체 세트를 갖기 때문에 trap
어떤 s도 상속받지 않지만 trap
상위 프로세스가 명시적으로 무시하는 s는 상속됩니다.(좋다 trap '' INT
).
하지만:
trap 'echo this is my trap' 0
save_traps=$(trap)
trap
처음이라면 특별해지세요오직이 명령은 상위 셸의 현재 설정 목록을 인용 형식으로 재현하여 traps
셸에 안전하게 다시 들어갈 수 있도록 명령 대체 하위 셸에서 실행됩니다. 그래서 당신은 이것을 할 수 있습니다 save_traps
,그 다음에 set
인수가 없으면 - 그리고 이미 언급된 나머지 모든 것 - 거의 모든 쉘 상태가 잠겨 있습니다. 그러나 원래 쉘 var 속성을 명시적으로 추가 export -p
하고 복원할 수도 있습니다.readonly -p
어쨌든 충분합니다.
답변2
옵션? : Bash에는 세 가지 옵션 세트가 있습니다.
옵션은 명령으로 읽거나 설정됩니다
set
.
(매뉴얼에서 이 명령을 사용하세요LESS=+/'set \[--abefhkmnptuvxBCEHPT\]' man bash
:)
모든 단일 문자 옵션:abefhkmnptuvxBCEHPT
옵션도 있습니다(단일 문자에 해당하지 않음).
set -o emacs set -o history set -o ignoreeof set -o interactive-comments set -o pipefail set -o posix set -o vi
옵션은 명령으로 읽거나 설정됩니다
shopt
.
(이 명령을 사용하여 매뉴얼을 읽으십시오LESS=+/'shopt \[-pqsu\]' man bash'
.)
목록은 길지만 인쇄하기 쉽습니다. 다음을 사용하십시오.$ shopt -p
또는 다음과 유사하지만 같지는 않습니다.
$ shopt
INVOCATION에 설정할 수 있는 옵션: (
수동 명령LESS=+/'^INVOCATION' man bash
:)모든
set
옵션:bash -abefhkmnptuvxBCEHPT
모든
shopt
옵션bash -O option
일부 옵션은 bash를 호출할 때만 의미가 있습니다.
bash -lirsDc
또한 (긴 옵션):
bash --debugger --help --init-file file --rcfile file --login \ --noediting --noprofile --norc --posix --restricted \ --verbose --version
모두 set
한 글자 옵션으로 -ri
인쇄됩니다 $-
.
-i Interactive
Only read with `$-` (if it contains an `i`).
-r Restricted
Also read with `shopt -p restricted_shell
예를 들어:
$ echo 'echo $0 $-' | bash -abefhikmprtuvxBCEHPT -lri
bash를 로그인 쉘로 호출하려면 shopt 보고서를 사용하십시오.
-l Login
read with `shopt -p login_shell`
그러므로:
$ echo 'shopt -p login_shell' | bash -abefhikmprtuvxBCEHPT -lri
shopt -s login_shell
이 옵션은 -n
코드가 실행되지 않는다는 의미이므로 어떤 코드로도 테스트할 수 없습니다.
인쇄 옵션
옵션 목록을 위한 최고의 도구달리기셸에서는 set
또는 로 설정된 값이 shopt
동일합니다 shopt
. 목록 설정 옵션:
shopt -o
그것은 정확히 동일하게 작동합니다 set -o
. shopt -po
와 동일한 결과를 얻으려면 사용하십시오 set +o
.
목록 저장소 옵션:
shopt -p
shopt -ps
설정된 내용을 인쇄할지 여부를 선택할 수 있습니다 .shopt -pu
모든 옵션을 얻으려면. 가능한 한 많은 긴 옵션과 -sDc
INVOCATION의 일부 ()를 인쇄할 수 없습니다.
$ echo $-; shopt -p ; shopt -po
변수에 저장하려면 다음을 수행하십시오.
$ storeoptions="$(echo "set -$-"; shopt -p ; shopt -po)"
이 변수는 모든 옵션을 설정하는 데 사용할 수 있습니다.
$ eval "$storeoptions"
답변3
~에서이 man
페이지:
shopt
...옵션이 없거나 -p 옵션을 사용하면 설정 가능한 모든 옵션 목록을 표시하고 각 옵션이 설정되었는지 여부를 나타냅니다.
shopt | grep "on$"
활성화된 모든 옵션 목록이 인쇄됩니다.
답변4
특정 옵션을 확인하려면:
if shopt -q <OPTION>
then echo '<OPTION> is set'
fi