.bashrc/.bash_profile에 왜 shebang이 없나요?

.bashrc/.bash_profile에 왜 shebang이 없나요?

간단한 문의: 본 적이 없다는 것을 방금 깨달았습니다.셰르본.bashrc스크립트 외에도 시스템이 로그인할 때 기본 셸을 사용하여 가져오는 것으로 생각됩니다( ) ${SHELL}. 이것이 왜 그런지, 그리고 기본 셸이 아닌 다른 것을 사용하여 로그인 스크립트를 실행하는 것이 나쁜 습관으로 간주되는지 궁금합니다.

답변1

.bashrc그리고 .bash_profile아니요스크립트. 이는 bash다음 두 가지 방법 중 하나로 실행될 때마다 획득되는 구성 파일 입니다 .

  • 인터렉티브
  • 로그인

이것부르다bash 매뉴얼 페이지의 관련 부분이 관련됩니다.

로그인 쉘인수 0의 첫 번째 문자는 -, 또는 option 으로 시작합니다 --login.

하나인터렉티브쉘은 옵션이 아닌 인수나 옵션 없이 표준 입력과 오류가 모두 터미널(에 의해 결정됨)에 연결되거나 이 옵션으로 시작되는 -c방법 입니다 . PS1은 대화형인 경우 설정 및 포함되어 쉘 스크립트 또는 시작 파일이 이 상태를 테스트할 수 있도록 합니다.isatty(3))-i$-ibash

다음 단락에서는 bash시작 파일을 실행하는 방법을 설명합니다. 파일이 존재하지만 읽을 수 없는 경우 bash는 오류를 보고합니다. 물결표 문자는 아래 설명과 같이 파일 이름에서 확장됩니다. 물결표 확장내부에확장 부분.

bash를 다음과 같이 사용할 때인터렉티브로그인 쉘 또는 이 옵션이 있는 비대화형 쉘로서 --login먼저 파일에서 읽고 /etc/profile파일이 존재하는 경우 명령을 실행합니다. 파일을 읽은 후 ~/.bash_profile, ~/.bash_login, 를 순서대로 찾아 존재 ~/.profile하고 읽을 수 있는 첫 번째 파일부터 명령을 읽고 실행합니다. --noprofile이 옵션을 사용하면 쉘이 시작될 때 이 동작을 비활성화할 수 있습니다.

로그인 쉘이 종료되면 bash는 파일이 ~/.bash_logout존재하는 경우 해당 명령을 읽고 실행합니다.

언제인터렉티브비로그인 쉘을 시작하는 쉘과 bash는 ~/.bashrc파일이 존재하는 경우 bash에서 명령을 읽고 실행합니다. --norc이 옵션을 사용하면 이를 억제할 수 있습니다. 이 --rcfile file 옵션은 bash가 ~/.bashrc.

--norc명령줄 스위치와 를 통해 로드되는 시기를 제어할 수 있습니다 --noprofile. 스위치를 사용하여 스위치가 로드되는 위치를 재정의할 수도 있습니다 --rcfile.

다른 사람들이 언급했듯이 이 source <file>명령을 사용하거나 이 명령을 사용하여 . <file>이러한 파일을 로드하는 방법을 에뮬레이트할 수 있습니다.

이 기능은 다음과 같이 생각하는 것이 가장 좋습니다.

  1. Bash는 베어 환경에서 시작됩니다.
  2. 그런 다음 bash는 대화형 또는 로그인으로 호출된 방식에 따라 이러한 파일 중 하나를 엽니다.
  3. ...파일의 각 명령을 한 줄씩 실행합니다...
  4. 완료 후 프롬프트 형태로 제어권을 부여하고 입력을 기다립니다.

통화 방법

이 주제는 가끔씩 언급되는 것 같으므로 여기에 bash다양한 호출 방법과 그 결과에 대한 간단한 치트 시트가 있습니다.노트:도움을 주기 위해 "sourced $HOME/.bashrc" 및 "sourced $HOME/.bash_profile" 메시지를 해당 파일에 추가했습니다.

기본 통화

  1. bash-i

    $ bash -i
    sourced /home/saml/.bashrc
    
  2. bash-l

    $ bash -l
    sourced /home/saml/.bashrc
    sourced /home/saml/.bash_profile
    
  3. bash -il -또는- bash -li

    $ bash -il
    sourced /home/saml/.bashrc
    sourced /home/saml/.bash_profile
    
  4. bash -c "..cmd.."

    $ bash -c 'echo hi'
    hi
    

    노트:-c스위치가 단일 파일을 얻지 못했다는 점에 유의하세요 !

구성 파일 읽기 비활성화

  1. 배쉬 --norc

    $ bash --norc
    bash-4.1$ 
    
  2. bash --구성 파일 없음

    $ bash --noprofile
    sourced /home/saml/.bashrc
    
  3. 배쉬 --norc -i

    $ bash --norc -i
    bash-4.1$ 
    
  4. 배쉬 --norc -l

    $ bash --norc -l
    sourced /home/saml/.bashrc
    sourced /home/saml/.bash_profile
    
  5. bash --noprofile -i

    $ bash --noprofile -i
    sourced /home/saml/.bashrc
    
  6. bash --noprofile -l

    $ bash --noprofile -l
    bash-4.1$ 
    
  7. bash --norc -i -또는- bash --norc -l

    $ bash --norc -c 'echo hi'
    hi
    

Bash를 호출하는 더 심오한 방법

  1. bash --rcfile $HOME/.bashrc

    $ bash -rcfile ~/.bashrc 
    sourced /home/saml/.bashrc
    
  2. bash --norc --rcfile $HOME/.bashrc

    $ bash --norc -rcfile ~/.bashrc 
    bash-4.1$ 
    

이것들은 실패했다

  1. bash -i -rcfile ~/.bashrc

    $ bash -i -rcfile ~/.bashrc 
    sourced /home/saml/.bashrc
    sourced /home/saml/.bash_profile
    bash: /home/saml/.bashrc: restricted: cannot specify `/' in command names
    
  2. bash -i -rcfile .bashrc

    $ bash -i -rcfile .bashrc
    sourced /home/saml/.bashrc
    sourced /home/saml/.bash_profile
    bash: .bashrc: command not found
    

아마 더 있을 수도 있지만, 아이디어를 얻으셨기를 바랍니다...

또 뭐야?

마지막으로, 이 주제에 너무 매료되어 더 자세히 읽고 탐구하고 싶다면 Bash 초보자 가이드, 특히 다음 섹션을 확인하는 것이 좋습니다.1.2. 본 어게인 쉘의 장점. 이 섹션의 다양한 하위 섹션은"1.2.2.1. 통화"통과하다"1.2.2.3.3.대화형 쉘 동작"호출할 수 있는 다양한 메서드 간의 하위 수준 차이점을 설명하세요 bash.

답변2

.bashrc스크립트는 bash스스로만 실행할 수 있습니다. 이는 독립적이지 않으며 exec시스템에서 사용하도록 의도되지 않았습니다. (실제로 일반적으로 실행 파일로 표시되지 않으며 말씀하신 것처럼 shebang 줄도 없습니다.)

source이러한 스크립트는 스크립트가 완료된 후에도 유지될 것으로 예상되는 환경 변수 변경(예:)과 같은 작업을 수행하는 경우가 많기 때문에 편집용입니다 . $PATH따라서 서브쉘에서 실행하려고 시도하는 것은 실제로 의미가 없습니다.

답변3

다른 답변 외에도 원하는 경우 이러한 구성 파일의 시작 부분에 shebang을 넣는 것을 금지하는 것은 없습니다.

Shebang은 일반 주석처럼 처리되므로 이를 소싱하는 쉘에는 해를 끼치지 않습니다. 즉, 무시됩니다.

이는 구문 강조를 사용하는 편집자가 파일에 사용되는 프로그래밍 언어를 찾는 데 도움이 될 수 있습니다.

vim일부 편집자는 후자의 모델 행과 같은 대안을 제공하기 를 원합니다 . 즉, 항상 다음 ~/.bashrc과 같이 모델 줄을 끝에 넣을 수 있습니다 ~/.bash_profile.

...
<code in ~/.bashrc>
...
# vim: ft=sh :

답변4

어디서든 읽었는데 정확히 어디인지는 모르겠지만 사실이에요

Bash 매뉴얼은 이와 관련하여 약간 혼란스럽습니다. 그러나 Bash는 쉘 스크립트처럼 ~/.bash_profile을 실행하지 않습니다. 파일을 읽은 다음 그 안에 있는 명령을 실행합니다(source ~/.bash_profile을 실행하여 비슷한 작업을 수행할 수 있습니다).

관련 정보