Linux Command Line 및 Shell Scripting Bible 에서 기본 쉘 스크립팅에 대해 읽고 있습니다.
/etc/profile
파일은 Bash 셸을 시작할 때 환경 변수를 설정 한다고 말합니다 . 이 /etc/profile.d
디렉토리에는 응용 프로그램 별 시작 파일이 포함 된 다른 스크립트가 포함되어 있으며이 스크립트는 시작시 셸에서 실행됩니다.
-
이러한 파일
/etc/profile
이 Bash 시작에 중요한 경우 왜이 파일의 일부가 아닌가? -
이러한 파일이 Bash 시작에 중요하지 않은 응용 프로그램 별 시작 파일 인 경우 왜 시작 프로세스의 일부입니까? 설정이 포함 된 특정 응용 프로그램이 실행될 때만 실행되지 않는 이유는 무엇입니까?
답변
이 파일들이 Bash 시작에도 중요한 경우 왜 / etc / profile의 일부가 아닌가?
“왜 하나의 거대한 스크립트로 결합되지 않았습니까?”라는 대답은 다음과 같습니다.
- 그것은 스크립트를 담당하는 사람들에게 유지 보수의 악몽이 될 것이기 때문입니다.
- 스크립트를 독립 모듈로로드하면 전체 시스템을보다 동적으로 조정할 수 있으므로 개별 스크립트는 다른 스크립트에 영향을주지 않고 추가 및 제거 할 수 있습니다. 기타.
- 그것들은 / etc / profile을 통해로드되기 때문에 어쨌든 같은 방식으로 bash “profile”의 일부가됩니다.
이러한 파일이 Bash 시작에 중요하지 않은 응용 프로그램 별 시작 파일 인 경우 왜 시작 프로세스의 일부입니까? 설정이 포함 된 특정 응용 프로그램이 실행될 때만 실행되지 않는 이유는 무엇입니까?
그것은 두 가지로 나눌 더 넓은 디자인 철학 질문처럼 보입니다. 첫 번째 질문은 쉘 환경 사용의 가치와 적절성에 관한 것입니다. 긍정적 인 가치가 있습니까? 예, 유용합니다. 모든 구성 문제에 가장 적합한 솔루션입니까? 아니요, 그러나 간단한 매개 변수를 관리하는 데 매우 효율적이며 널리 인식되고 이해됩니다. 달리 말하면, 이러한 것들을 이기종으로 구성하기로 결정하면 아마도 $ PATH는 별도의 독립적 인 도구로 관리 될 수 있습니다. $ EDITOR와 같은 선호하는 도구는 어딘가에 sqlite 파일에 있고 $ LC lang 내용은 텍스트 파일에있을 수 있습니다 다른 곳에서 사용자 정의 형식 등-env 변수를 사용하지 않고/etc/profile.d
갑자기 더 단순 해 보입니까? env 변수가 무엇인지, 어떻게 작동하는지, 어떻게 사용하는지, 이미 “환경” 이라고 불리는 5 가지 유비쿼터스 측면에 대해 완전히 다른 5 가지 메커니즘을 배우는 것을 이미 알고있을 것입니다 .
두 번째 질문은 “시작하기에 적절한시기입니까?”입니다. 이는 매우 효율적이지 않다는 이의를 제기합니다 (사용되거나 사용되지 않을 수있는 모든 데이터 등). 그러나:
- 현실적으로, 데이터를 많이 사용하는 것은 아닙니다. 부분적으로 올바른 응용 프로그램을 구성하는 다른 방법이 있기 때문에 올바른 매개 변수를 가진 사람이 몇 가지 간단한 매개 변수 이상으로 사용하지 않기 때문입니다.
- 일반적으로 호출되는 항목과 관련하여 현명하게 사용되는 경우 호출
gcc
할 때마다 파일에서 기본 $ CFLAGS를 설정하는 등의 효율성이 떨어집니다. 관련된 메모리의 양은 무한대라는 것을 명심하십시오. - 그것은 하나 이상의 응용 프로그램과 관련 될 수있는 체계적인 것들을 포함 할 수 있으며, 쉘은 일반적인 근거 입니다.
이 목록에 더 많은 내용을 추가 할 수 있지만, 이것이 문제의 장단점에 대한 아이디어를 제공 할 수 있기를 바랍니다.
답변
이러한 파일은 응용 프로그램에 따라 다르지만 응용 프로그램을 시작할 때가 아니라 셸을 시작할 때 제공됩니다. 구성 디렉토리는 다른 많은 위치에서 발견되는 것과 같은 이유로 여기에 사용됩니다. 이를 통해 응용 프로그램 또는 소프트웨어 패키지가 구성을 수정할 수 있습니다. 사용자가 수정할 수있는 단일 구성 파일을 관리 / 업데이트하려고하는 여러 패키지가 번거롭고 지저분하기 때문에 분할 구성이 없으면 불가능합니다.
또한 참고 사항 /etc/profile
은 배쉬뿐만 아니라 모든 쉘에서 제공됩니다. bash 특정 구성 파일은 bashrc이며 대화식 쉘 전용입니다.
답변
jordanm의 답변 이 잘못되었습니다. /etc/profile
모든 쉘이 제공하는 것은 아닙니다. 당신이 지적하는 것처럼,에 의해 공급되지 않고 csh
, tcsh
– 나는 확실하지 않다 zsh
. sh
Korn Shell ( ksh
) 및 BASH ( bash
) 와 같은 Bourne shell ( ) 파생물 이 제공합니다 . csh
을 사용합니다 /etc/login
. Borne Shell 파생 상품을 독점적으로 사용하는 사람들은 다른 쉘을 잊어 버리는 경향이 있습니다. 그들은 /etc/profile
“모든 사용자들”에게 적용되기를 기대하는 것에 무언가를 추가 하고 이상한 C 쉘 사용자 (그리고 우리는 이상한 로트)가 그들이 구성한 것들을 가지고 있지 않을 때 놀랍니다 /etc/profile
.
그럼에도 불구하고 사람들은 다른 Borne Shell 파생 쉘이 존재하는 것을 잊는 경향이 있습니다. 그들이 사용하는 경우 bash
또는 ksh
, 그들은 구문을 추가 부담 /etc/profile
변수를 정의하고 같은 줄에 수출 말처럼 즉, Bourne 쉘에서 유효하지 않습니다. 그런 다음 스크립트를 수행 #!/bin/sh
하고 구문을 질식시킵니다. /etc/profile
Bourne Shell 호환 구문을 준수해야합니다.
마찬가지로 bash 구문을 원할 경우 .profile
사용 .bash_profile
하십시오. 약간 추가 입력이 가능하지만 한 번에 추가로 입력하는 추가 입력입니다. 참조 ${HOME}
및 ~
기타 등등. 유닉스의 일부 특징, cron 작업은 아래 sh
에서 실행되고 각 줄 Makefile
은에서 처리 sh
되므로 여러 가지 유형의 UNIX에서 작업하는 경우 .profile
Bourne 쉘과의 호환성 을 유지하기 위해 실제로 지불합니다 . SysAdmin으로서 .profile
Bourne Shell과 호환되도록 수정하여 누군가를 도와 준 횟수를 알 수 없습니다 .
리눅스에서, 당신이 그것을 실행할 때 /bin/sh
의 링크 /bin/bash
이며, 그것을 실행하는 데 사용 된 경로를 보이며, 이론적으로 Bourne Shell이 지원하는 것으로 만 제한됩니다. 마찬가지로 vi
Linux에서는 실제로 vim
다시 제한적입니다. 때때로 “블리드 스루”기능이 나타납니다. 때때로 vim
척 vi
뭔가 할 것입니다 vim
것을 지원 vi
하지하지의 저자가 있기 때문에 vim
“VI 이전 버전과의 호환성”모드에서이 기능의 사용을 중지하는 것이 잊어 버렸습니다. bash
척하는 것이 sh
비슷한 “블리드 스루”기능을 가지고 있다면 놀라지 않을 것 입니다. 일부 기능이 “Linux의 Borne Shell에서 작동”하지만 System V 또는 BSD 기반 UNIX (AIX, OpenBSD 등)에서는 작동하지 않더라도 놀라지 않을 것입니다.