현재 쉘에 대한 bash 옵션을 어떻게 나열합니까?


27

bash 인터프리터 자체에는 옵션이 있습니다.

bash 맨 페이지 22-23 행 :

OPTIONS  
All of the  single-character shell options documented in the description of the set builtin command can be used as options when the shell is invoked.   In addition, bash interprets the following options when it is invoked:  
-c ...  
-i ...  
-l ...  
-r ...  

bash 맨 페이지에서 몇 가지 검색 패턴을 사용했습니다.

  • /^\s*set
  • /list

현재 쉘에 적용되는 이러한 설정 목록을 인쇄 할 수 있습니까?

답변:


26
printf %s\\n "$-"

단일 문자 옵션을 단일 문자열로 나열합니다.

이 매개 변수는 다음과 같이 사용할 수도 있습니다.

set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"

먼저 셸 -f이름 확장을 비활성화 하고 동시에 $-존재하는 경우 값을 저장합니다 $1. 다음으로 glob이 발생하지 않으며 마지막 +filename 확장이 다시 한 번 활성화되고 비활성화 될 수도 있습니다.

예를 들어,에 -f대한 값을 $-처음 저장할 때 ilename 확장이 이미 비활성화 된 경우 저장된 값은 (적어도)입니다 .

f

그리고 set다시 실행 되면 다음과 같이 작동합니다.

set +f -f

시작한 곳을 바로 돌려줍니다.

set +o

쉘 재진입에 안전한 형식으로 모든 set테이블 쉘 옵션 ( 유능한 단어에 대한 Jason의 답변shopt -단어입니까?-옵션) 을 나열합니다. 그런 식으로 다음을 수행 할 수도 있습니다.

state=$(set +o)
set -some -crazy -options
eval "$state"

쉘 옵션의 상태를 각각 저장, 변경 및 복원합니다.

한 번에 shopt이온 및 set테이블 옵션 을 처리하려면

state=$(set +o;shopt)
#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)

서브 쉘이 새로운 프로세스이고 자체의 s 세트를 가져 와서 부모를 명시 적으로 무시한 것 (예를 들어 )을 상속받지 않기 때문에 이것을 단지 나의 서브 쉘 이라고 인쇄 할 것이다 .traptraptrap '' INT

하나:

trap 'echo this is my trap' 0
save_traps=$(trap)

trap명령 대체 서브 쉘에서 처음으로 실행되는 유일한 명령 인 경우, 쉘에 traps안전하게 다시 입력하기 위해 인용 된 형식으로 현재 설정된 상위 쉘 목록을 재생산한다는 점에서 특별히 작동 합니다. 당신이 할 수 있도록 save_traps, 다음 set 인수없이 - 나머지 모두를 이미 언급 - 거의 모든 쉘 상태에 대한 잠금을 얻을 수 있습니다. 그래도 원래 쉘 var 속성 을 명시 적으로 추가 export -p하고 readonly -p복원 할 수 있습니다 .

어쨌든 충분합니다.


감사합니다. 코드가 훌륭하게 작동합니다. 모든 옵션의 전체 목록을 얻으려면 set +o shopt ?를 모두 사용해야합니다 . ( shopt단어가 될 수 있다는 것은 settable매뉴얼 페이지에서 사용되므로 shoptable저에게 효과적입니다)
the_velour_fog

@ user4668401-그렇게 할 것이라고 생각합니다.
mikeserv

TL; DR, 그러나 3 줄 솔루션이 옵션을 변경하고 '있는 그대로'되돌리려면 +1000 스크립트를 만들거나 복사 / 붙여 넣을 수있는 지침을 만들 때 필요한 것입니다.
Balmipour

@mikeserv 것으로 보인다 -p 옵션의 요구를 포함하는 상태를 저장할 때 추가되는 shopt이온, 즉state=$(set +o;shopt -p)
nkatsar

9

로부터 man페이지 :

shopt
... 옵션이 없거나 -p 옵션을 사용하면 설정 가능한 모든 옵션 목록이 표시되며 각 옵션의 설정 여부가 표시됩니다.
shopt | grep on

활성화 된 모든 옵션 목록을 인쇄합니다.


고맙습니다. 이 옵션 set과와 모두에 의해 설정 가능한 옵션이 나열되어 있는지 알고 shopt있습니까?
the_velour_fog 7

@ user4668401 아니요, set훨씬 더 광범위합니다. 매뉴얼 페이지 항목을 참조하십시오 .
jasonwryan

그리고 단일 옵션이 켜져 있는지 확인하려면 :shopt <option>
kos

여기에는 이름에 'on'이있는 opt가 포함됩니다 (예 :) huponexit. 수정하는 간단한 방법은 다음과 같습니다shopt | grep on$
Mike D

6

모든 옵션을 나열하려면

set -o

특정 옵션을 검사하려면

set -o | grep <OPTION>

verbose예를 들어 옵션을 선택하십시오 .

$ set -o | grep verbose
verbose         off

6

옵션? : bash에는 세 가지 옵션 그룹이 있습니다.

  1. 옵션은 명령으로 읽거나 설정합니다 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
  2. 옵션은 명령으로 읽거나 설정합니다 shopt.
    (이 명령으로 설명서를 읽어 LESS=+/'shopt \[-pqsu\]' man bash')
    목록은 매우 긴하지만, 쉬운 사용을 인쇄하는 것입니다 :

    $ shopt -p

    또는 유사하지만 동일하지는 않습니다.

    $ shopt
  3. : 호출에 설정 될 수있는 옵션
    (매뉴얼에 대한 명령 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

모든 옵션을 얻으려면. 가능한 많은 긴 옵션과 -sDcINVOCATION의 일부 ( )를 인쇄 할 수 없습니다.

$ echo $-; shopt -p ; shopt -po

변수에 저장하려면 :

$ storeoptions="$(echo "set -$-"; shopt -p ; shopt -po)"

변수를 사용하여 모든 옵션을 다시 설정할 수 있습니다.

$ eval "$storeoptions"

1

특정 옵션을 검사하려면

if shopt -q <OPTION>
then echo '<OPTION> is set'
fi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.