回答:
信じられないほど難解なautoconfシステムは、
ソフトウェアソースコードパッケージを自動的に構成するシェルスクリプトを作成します。これらのスクリプトは、ユーザーが手動で介入することなく、パッケージを多くの種類のUNIXライクシステムに適合させることができます。Autoconfは、M4マクロ呼び出しの形式でパッケージが使用できるオペレーティングシステム機能をリストしたテンプレートファイルからパッケージの構成スクリプトを作成します。
それが十分に怖くない場合は、最初のautoconfスクリプトを書き込もうとするまで待ちます。autoconfの作者はその難しさについて恥ずかしがり屋ではありません:
Autoconfを理解していない人は、それを再発明すると非難されます。Autoconfの主な目標は、ユーザーの生活を楽にすることです。メンテナーの生活を楽にすることは、二次的な目標です。別の言い方をすれば、主な目標は、パッケージメンテナー向けにconfigureの生成を自動化しないことです。むしろ、目標は、自動没収された各パッケージのエンドユーザーにとって、構成が簡単で、移植性があり、予測可能なものにすることです。そして、この程度まで、Autoconfはその目標で非常に成功しています。Autoconfリストへの苦情のほとんどは、結果として生じるconfigureの振る舞いではなく、Autoconf入力の記述の難しさに関するものです。
一方、さまざまなシステムの厄介な部分について、これまでに想像していたよりも多くのことを知って、プロセスから抜け出します。
最近では、個人的には、はるかに標準的なDebian風のディストリビューションが私のターゲットであり、自分自身に別のautoconfスクリプトを作成させないようにしています。それを選択できる贅沢を持っていることは幸運です。あなたはそのような緯度を持っていないかもしれません。
スクリプトは静的分析を無効にする構成を使用する場合があるため、これは自動化する単純なタスクではありません。それが今まで使用している場合eval
などの任意のプレフィックスtime
やnice
、それは次のように実行しているような単純なようではありませんegrep -o '^[^ ]+ ? '
コマンドを取得することとを介してそれらを実行していますwhich
かtype
。
最後に、確実に確認する唯一の方法は、スクリプトを実行し、失敗したものを見つけることです。スクリプトが適切に記述されている場合、実行前に非標準のコマンドをチェックします。そうでない場合、試行錯誤が確実な唯一の方法です。
そうは言っても、次のようなことが役立つ場合があります。
#!/bin/bash
egrep -o -e '^[^ ]+ ? ' -e '[a-zA-Z0-9]+' "$1" | sort -u | {
while read line
do
if type $line &>/dev/null
then
echo "$line found"
else
echo "Error: $line not found"
fi
done
} | sort
出力は次のようになります。
$ ./check i_wonder.sh
cd found
echo found
elif found
else found
Error: abort not found
Error: checkurl not found
Error: cleanup not found
Error: count not found
Error: debug not found
Error: deleteFile not found
Error: die not found
find found
for found
grep found
if found
mv found
readarray found
rm found
shopt found
size found
sleep found
stat found
trap found
unset found
while found