/etc/environment
,,, 등 여러 구성 파일을 읽거나 실행하여 환경 변수가 설정된다는 것을 알고 있습니다./etc/profile
~/.profile
~/.bashrc
하지만 내가 읽을 때이 블로그 게시물, 환경을 가져오지 않고 로그인하지 않은 대화형 bash 셸을 시작하기 위해 다음 명령을 사용해 보았습니다.
osboxes@osboxes:~$ env -i bash
PATH
새 셸에 들어간 후 변수를 확인 하고 다음과 같은 결과를 얻었습니다.
osboxes@osboxes:/home/osboxes$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.
내가 아는 한, 이 비로그인 대화형 셸은 or 를 읽 /etc/environment
거나 가져오지 않으며 합계 만 제공합니다 ./etc/profile
~/.profile
/etc/bash.bashrc
~/.bashrc
PATH
그렇다면 이 쉘 세트의 변수는 어떻게 구성되어 있습니까? 읽거나 소스로 사용할 특정 파일이 있습니까?
답변1
printenv
PATH에 값이 없는지 확인하십시오 . 무언가를 찾으면 아마도 당신의 것에서 온 것일 것입니다 ~/.bashrc
. 비어 있다면 Bash 자체에 의해 설정됩니다. 쉘이 시작될 때 PATH 값을 찾을 수 없으면 값을 설정합니다. PATH가 없으면 거의 아무것도 작동하지 않기 때문입니다.
소스 코드에서 이것이 어떻게 수행되는지 확인할 수 있습니다(Bash 4.4의 소스 코드를 보고 있습니다).
존재하다variables.c
:
/* Now make our own defaults in case the vars that we think are
important are missing. */
temp_var = set_if_not ("PATH", DEFAULT_PATH_VALUE);
#if 0
set_auto_export (temp_var); /* XXX */
#endif
존재하다config-top.h
표시된 PATH와 일치하는 정의를 찾을 수 있습니다.
/* The default value of the PATH variable. */
#ifndef DEFAULT_PATH_VALUE
#define DEFAULT_PATH_VALUE \
"/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
#endif
.
나는 PATH를 넣는 것이 실수로 일을 하기 쉽기 때문에 일반적으로 나쁜 습관으로 간주된다고 생각합니다 !
답변2
PATH
Bourne Again 쉘 매뉴얼에 설명되어 있듯이 쉘 변수를 초기화하는 환경 변수가 없고 PATH
시작 스크립트에서 쉘 변수가 설정되지 않은 경우 쉘 변수는 기본값을 갖습니다.
매뉴얼에 따르면 "설치된 시스템 관리자 bash
"에 따라 값이 달라집니다. 실제로 소스에서 Bourne Again 쉘을 컴파일한 사람이 어떤 옵션을 선택했는지에 따라 달라집니다.
- Debian의 Bourne Again 쉘 패키지에서는 매뉴얼의 기본 예에 가깝습니다:
% unsetenv PATH `명령 -v bash` -c 'echo $PATH printenv 경로' /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:. %
- Bourne Again 쉘의 OpenBSD 포트/패키지는 동일합니다:
$ unsetenv PATH `명령 -v bash` -c 'echo $PATH printenv 경로' /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:. $
- Bourne Again 셸의 FreeBSD 포트/패키지에서는 다소 손상되었습니다.
% unsetenv PATH `명령 -v bash` -c 'echo $PATH printenv 경로' /sbin:/bin:/usr/sbin:/usr/bin:/usr/games:%%LOCALBASE%%/sbin:%%LOCALBASE%%/bin %
2017년 3월에 우리는 소프트웨어 구축에 사용된 컴파일러 옵션을 조정하여 조정했습니다.
printenv
어떤 줄도 인쇄되지 않는다는 사실은 이 기본 PATH
쉘 변수가 환경 변수로 내보내지지 않는다는 것을 의미합니다.