.bashrc/.bash_profileになぜshebangがないのですか?

.bashrc/.bash_profileになぜshebangがないのですか?

簡単なお問い合わせ:見たことがないことに気づきました。シェルボーン.bashrcスクリプトに加えて、システムがログインするときにデフォルトのシェルを使用してインポートすると考えられます()${SHELL}。これがなぜそうであるのか、そしてデフォルトのシェル以外のものを使ってログインスクリプトを実行するのが悪い習慣であると考えられるのだろうか。

ベストアンサー1

.bashrcそして.bash_profileいいえスクリプト。これはbash、次の2つの方法のいずれかで実行されるたびに取得される構成ファイルです。

  • インタラクティブ
  • ログイン

これ呼ぶ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. ...ファイル内の各コマンドを1行ずつ実行します...
  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

おすすめ記事