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