env -i 및 bash-c

env -i 및 bash-c

누군가 내가 둘 사이의 차이점을 이해하도록 도와줄 수 있습니까?

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 하위 프로세스에 전달되도록 합니다.

관련 정보