누군가 내가 둘 사이의 차이점을 이해하도록 도와줄 수 있습니까?
bash -c 'echo $SHELL $HOME $USER'
그리고
env -i bash -c 'echo $SHELL $HOME $USER'
여러 번 시도했지만 여전히 이해가 되지 않습니다. 나는 그것에 대해 작업 중이며 env
예제 bash -c
에 나타납니다. 정확히 어떤 bash -c
역할을 하나요?
답변1
env -i
빈 환경에서 지정된 명령을 실행합니다.
bash -c …
옵션의 인수 -c
( the …
)를 bash 조각으로 실행합니다.
bash -c 'echo $SHELL $HOME $USER'
bash를 실행해도 이러한 변수가 수정되지 않으므로 동일합니다 echo $SHELL $HOME $USER
(적어도 처음에 설정되어 있는 한).
env -i bash -c 'echo $SHELL $HOME $USER'
bash
-c
매개변수 와 echo $SHELL $HOME $USER
빈 환경을 사용하여 실행합니다. Bash가 시작되면 SHELL
(쉘 변수에만 설정되고 bash가 시작될 수 있는 서브루틴 환경으로 내보내지지 않음)을 포함하여 여러 쉘 변수가 설정됩니다 . 따라서 bash가 command를 구문 분석하고 확장할 때 echo $SHELL $HOME $USER
변수 HOME
및는 USER
설정되지 않았지만 (bash가 왜 이것을 수행하는지 모르겠습니다) SHELL
로 설정되고 명령 뒤에 두 개의 공백이 나타납니다./bin/sh
/bin/sh
매개변수 주위의 작은따옴표는 bash -c
따옴표 안의 텍스트가 실행 중인 쉘에 의해 확장되지 않도록 하여 env -i bash -c '…'
텍스트가 변경되지 않고 bash 하위 프로세스에 전달되도록 합니다.