2009-09-17 10 views
5

は、私はこのようなconfigure.acファイルを作成:完全に展開された変数をconfigureから取得する方法は?

この目的は、configureスクリプトが setを使用して作成し、すべての利用可能な環境変数を印刷することですので、私はこれを行う

AC_INIT() 
set 

[email protected]:~$ autoconf 
[email protected]:~$ ./configure 

をどの

build= 
cache_file=/dev/null 
IFS=' 
' 
LANG=C 
LANGUAGE=C 
datarootdir='${prefix}/share' 
mandir='${datarootdir}/man' 
no_create= 

などの変数を表示します。 問題がある:私は${prefix}/shareような変数を展開したい

  1. - bashがUIDのような読み取り専用の変数を変更について不平を言うので、そのファイルexample.shに すべてをパイプとはbashを使用してそれを実行すると動作しません。また、拡張そのものも機能していないようです。
  2. 私は拡張が働くところ、このためmakefileを使用してみましたが、それは上記の出力でのように、文字列に改行について誰がどのように構成するのが完全に拡張されたバージョンを取得するという考えを持っていますIFS=' causes an error message Makefile:24: *** missing separator. Stop.

ラインを不平を言います出力?

+0

こんにちは!あなたはなぜそれをしたいのか説明できますか?他の問題を困難な方法で解決しようとしているように、あなたの質問は聞こえます。 (たとえば、 '$ datadir'のような変数の展開された値を取得したいのであれば、もっと簡単な方法があります。) – adl

+0

実行中のLinuxシステムとは独立したシェルスクリプトテンプレートを作成したいので、私は ですサーバを設定し、いくつかのパラメータの変更だけを必要とする2番目のインスタンスに対して同じスクリプトを使用するスクリプトを作成することができます テンプレートエンジンimはスクリプトの変数を検索/置換するだけです これを行うにはエンジンをすべて初期化する必要があります変数またはそれらは取り替えられません –

+0

@adlあなたはそれを扱うための「簡単な」方法が何であるか説明できますか?私もこの問題に苦しんでいます –

答えて

6

マニュアルはAutoconf(私は正確な場所を思い出すか、見つけることができません)「手動」Makefile.inの中から変数置換のような種類を行う(またはあなたがAutomakeのを使用するために起こる場合.am)することをお勧めします:

Makefile.in

[...] 
foo.sh: foo.sh.in 
     $(SED) \ 
      -e 's|[@][email protected]|$(prefix)|g' \ 
      -e 's|[@][email protected]|$(exec_prefix)|g' \ 
      -e 's|[@][email protected]|$(bindir)|g' \ 
      -e 's|[@][email protected]|$(datarootdir)|g' \ 
      < "$<" > "[email protected]" 
[...] 

foo.sh.in

#!/bin/sh 
[email protected]@ 
du "$datarootdir" 
+1

Ref:http://www.gnu.org/software/automake/manual/html_node/Scripts.html#Scripts – Lekensteyn

関連する問題