2017-08-11 3 views
0

SHELLを伝えることは可能ですか? bash、.SHELLFLAGSを使って特定の(bash)rcファイルを使用するには?.SHELLFLAGS変数を使用してGNU-Makeの "bashrc"ファイルを選択できますか?

以下に2つの例を示します。最初は私がやりたいことを示し、2番目は望ましい結果を達成する1つの方法を示しています。

私には、さまざまなレシピで使用したい変数と機能の束を定義するbashrcファイル(OpenFOAMから)があります。

ありがとうございます。


例(に動作していない)

  • ファイル:bashrc

    export HELLOWORLD="Hello World" 
    
  • ファイル:Makefile

    SHELL=/bin/bash 
    .SHELLFLAGS=--rcfile bashrc -- 
    
    test: 
        @\ 
        echo "$${HELLOWORLD}" 
    

例(作業

  • ファイル:bashrc

    export HELLOWORLD="Hello World" 
    
  • ファイル:Makefile

    .ONESHELL: 
    SHELL=/bin/bash 
    
    test: ; source bashrc 
        @\ 
        echo "$${HELLOWORLD}" 
    

答えて

2

あなたが見つける--rcfileオプションに関連し、bashのmanページ読めば:特に

--rcfile file 
      Execute commands from file instead of the system wide initial‐ 
      ization file /etc/bash.bashrc and the standard personal initial‐ 
      ization file ~/.bashrc if the shell is interactive (see INVOCA‐ 
      TION below). 

注意これはどんな効果を持っているため、シェルが対話型である必要がありますが、呼び出すを作るシェルはもちろんのではないことインタラクティブ

.SHELLFLAGSでGNU makeマニュアルを読むと、デフォルト値は-c(またはPOSIXモードでは)であることがわかります。 -cオプションを指定すると、シェルはコマンドラインから実行するスクリプトを読み取ることができます。これはmakeがシェルを呼び出す方法です。これは、.SHELLFLAGSをあなたの値で置き換えたときにそれを含める必要があることを意味します。

だからあなたのメイクファイルとmakeが、それは、このコマンドラインを使用しますシェル実行時に:

/bin/bash --rcfile bashrc -- 'echo "${HELLOWORLD}"' 

明確に仕事に行くのではありません。

.SHELLFLAGS = --rcfile bashrc -ic -- 

-iオプションは、対話型シェルを強制的に、あなたはコマンドとして最初の非オプションの引数を実行するために作る指示する-cオプションを必要とする:あなたはこのよう.SHELLFLAGSを設定する必要があります。

関連する問題