/etc/profile.d의 스크립트는 무엇을합니까? 있으며이 스크립트는

Linux Command Line 및 Shell Scripting Bible 에서 기본 쉘 스크립팅에 대해 읽고 있습니다.

/etc/profile파일은 Bash 셸을 시작할 때 환경 변수를 설정 한다고 말합니다 . 이 /etc/profile.d디렉토리에는 응용 프로그램 별 시작 파일이 포함 된 다른 스크립트가 포함되어 있으며이 스크립트는 시작시 셸에서 실행됩니다.

  • 이러한 파일 /etc/profile이 Bash 시작에 중요한 경우 왜이 파일의 일부가 아닌가?

  • 이러한 파일이 Bash 시작에 중요하지 않은 응용 프로그램 별 시작 파일 인 경우 왜 시작 프로세스의 일부입니까? 설정이 포함 된 특정 응용 프로그램이 실행될 때만 실행되지 않는 이유는 무엇입니까?



답변

이 파일들이 Bash 시작에도 중요한 경우 왜 / etc / profile의 일부가 아닌가?

“왜 하나의 거대한 스크립트로 결합되지 않았습니까?”라는 대답은 다음과 같습니다.

  1. 그것은 스크립트를 담당하는 사람들에게 유지 보수의 악몽이 될 것이기 때문입니다.
  2. 스크립트를 독립 모듈로로드하면 전체 시스템을보다 동적으로 조정할 수 있으므로 개별 스크립트는 다른 스크립트에 영향을주지 않고 추가 및 제거 할 수 있습니다. 기타.
  3. 그것들은 / 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. shKorn 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/profileBourne Shell 호환 구문을 준수해야합니다.

마찬가지로 bash 구문을 원할 경우 .profile사용 .bash_profile하십시오. 약간 추가 입력이 가능하지만 한 번에 추가로 입력하는 추가 입력입니다. 참조 ${HOME}~기타 등등. 유닉스의 일부 특징, cron 작업은 아래 sh에서 실행되고 각 줄 Makefile은에서 처리 sh되므로 여러 가지 유형의 UNIX에서 작업하는 경우 .profileBourne 쉘과의 호환성 을 유지하기 위해 실제로 지불합니다 . SysAdmin으로서 .profileBourne Shell과 호환되도록 수정하여 누군가를 도와 준 횟수를 알 수 없습니다 .

리눅스에서, 당신이 그것을 실행할 때 /bin/sh의 링크 /bin/bash이며, 그것을 실행하는 데 사용 된 경로를 보이며, 이론적으로 Bourne Shell이 ​​지원하는 것으로 만 제한됩니다. 마찬가지로 viLinux에서는 실제로 vim다시 제한적입니다. 때때로 “블리드 스루”기능이 나타납니다. 때때로 vimvi뭔가 할 것입니다 vim것을 지원 vi하지하지의 저자가 있기 때문에 vim“VI 이전 버전과의 호환성”모드에서이 기능의 사용을 중지하는 것이 잊어 버렸습니다. bash척하는 것이 sh비슷한 “블리드 스루”기능을 가지고 있다면 놀라지 않을 것 입니다. 일부 기능이 “Linux의 Borne Shell에서 작동”하지만 System V 또는 BSD 기반 UNIX (AIX, OpenBSD 등)에서는 작동하지 않더라도 놀라지 않을 것입니다.