bash 명령 실행의 이점

bash 명령 실행의 이점

bash주문을 실행하면 어떤 이점이 있나요? 내 터미널 창에서는 육안으로 어떤 일이 일어나는지 볼 수 없습니다. 증가한 것을 확인했지만 $SHLVL그 외에는 bash구현되었는지는 알 수 없습니다. 게다가 달리는 것은 bash --help큰 의미가 없습니다. 나는 bash가 사용 가능한 쉘 중 하나라는 것을 알고 있지만 이미 Bourne Again 쉘을 사용하고 있다면 이를 중첩해도 아무런 이점이 없습니다. 어떤 시나리오에서 실행해야 합니까 bash?

답변1

bash이미 셸을 실행하고 있다면 bash별도로 실행하는 것의 이점은 단 하나뿐입니다. 새 셸은 (어떤 export항목에도 불구하고) "깨끗한" 환경을 갖게 됩니다.

그러나 현재 다른 셸을 실행 중이고 bash스크립트를 호출하려고 하는데 해당 권한이 올바른 shebang 줄(즉, 실행 파일)로 +x 설정되지 않은 경우 이를 사용하여 bash /path/to/script.sh올바른 셸로 실행되고 있는지 확인할 수 있습니다. .

답변2

(또는 시작하는 어떤 쉘이든) 새 쉘 세션을 시작하면 bash새로운 환경이 설정됩니다. 상위 셸 세션에서 모든 환경 변수1를 상속합니다 . 새 세션이 종료되면 해당 환경이 삭제됩니다.

#!스크립트를 실행하거나( 스크립트 자체에서 -line을 우회하기 위해) bash환경에서 특정 명령을 실행하기 위한 명시적 인터프리터로 사용하는 것 외에도 bash -c대화형 셸을 실행하기 위해 사용하는 것이 bash테스트에 유용할 수 있습니다.

ksh93내 로그인 쉘이 가 아니기 때문에 나는 이것을 사용해 왔으며 bash여기에 관한 많은 질문이 있는 것 같습니다 bash. 테스트하고 싶은 것을 테스트한 후에는 exit환경 의 임시 변수로 인한 오염 없이 Ctrl+D신뢰할 수 있는 세션을 재개 할 수 있습니다.ksh93

bash물론 로그인 쉘이 .

사실 bash클린 세션을 시작하기 위한 작은 쉘 기능도 있습니다. 기본적으로 실행되지만 ( env -i bash시작 시 bash환경 변수가 새 세션으로 전송되지 않음 ) 임시 작업 디렉터리도 생성됩니다. 종료 후 디렉토리는 쉘 기능에 의해 삭제됩니다.

1환경 변수는 내보낸 셸 변수입니다.


누구든지 관심이 있다면:

function shell
{
    # Starts the specified shell in a clean environment (save for HOME,
    # TERM and SHELL) and with an empty temporary working directory.
    # The working directory is deleted upon exiting the shell session.
    # If no shell name is given, the shell is infered from $SHELL.

    typeset shell="$( basename "${1:-$SHELL}" )"

    typeset realshell="$( grep "^[^#].*/$shell\$" /etc/shells )"

    if [[ -z "$realshell" ]] || [[ ! -x "$realshell" ]]; then
        printf 'No such shell: %s\n' "$shell" >&2
        return 1
    fi

    tmpcwd="$( mktemp -d "${TMPDIR:-/tmp}/shell-$shell.XXXXXXXX" )"
    trap 'printf "Removing %s\n" "$tmpcwd" >&2; rm -rf "$tmpcwd"' EXIT

    printf 'Starting %s in %s\n' "$realshell" "$tmpcwd" >&2

    (
        cd "$tmpcwd" &&
        env -i  SHELL="$realshell" \
                TERM="$TERM" \
                HOME="$HOME" \
                "$realshell"
    )
}

다음을 사용하십시오(가독성을 위해 추가 줄 바꿈이 삽입됨).

$ shell bash
Starting /usr/local/bin/bash in /tmp/shell-bash.mqUhTkBF

bash-4.4$ ls

bash-4.4$ env
PWD=/tmp/shell-bash.mqUhTkBF
HOME=/home/kk
TERM=rxvt
SHELL=/usr/local/bin/bash
SHLVL=1
_=/usr/bin/env

bash-4.4$ exit
exit
Removing /tmp/shell-bash.mqUhTkBF

관련 정보