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

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

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 "$@"

-fin 값을 저장하는 동안 먼저 쉘 파일 이름 확장을 비활성화하십시오 . 다음에는 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매개변수 없이 동일한 것을 더 많이 호출 할 수도 있습니다 . 하지만 이건... 가려질 수도 있어요. 제 생각에는 그렇게 하기 전에 "$@"배열에 넣어야 한다고 생각합니다.bashset

아니요, 아직 있습니다 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에는 세 가지 옵션 세트가 있습니다.

  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. 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

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

$ 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

관련 정보