2016-08-16 12 views
1

私は現在、sourceコマンドですべての設定変数を読み込むスクリプトを使用しています。すばやく効果的です。しかし、私はそれが非常に安全な選択肢ではないことを理解しています。ソースの代わりにgrep lookup/cut関数を使用して、bashの設定ファイルを読み込みます。

私は同じ結果を達成するために$include指示を使用できることを読んだ。 sourceと違っていて安全か、それとも本質的に同じですか?

上記の2つのオプションが安全でない場合は、シェルスクリプトブックで見つけたlookup関数を理解しようとしています。基本的にはgrep、区切り文字、cutを使用してファイルから変数名の検索を行い、その値を取得します。これは安全だと私はスクリプトを変更するために使用することができます。

ほとんどそのままです。私は区切り文字を$ TABから "="に変更する必要があると思うが、それがどういう仕組みか、それがどういう意味か分からない。

私の設定ファイルのフォーマット:(ノートから)

Param=value 

サンプル機能

lookup() { 
    grep "^$1$TAB" "$2" | cut -f2 
} 

用途:

lookup [options] KEY FILE 
-f sets field delimiter 
-k sets the number of field which has key 
-v specifies which field to return 

私はRaspbian Jessie LiteのDebian版を使用しています。

答えて

1
代わり grep

cutあなたは両方の検索を行うと、簡単に特定の区切り文字に基づいて業務をカットすることができますawkを使用して検討する必要があります。

lookup() { 
    key="$1" 
    filename="$2" 

    awk -F= -v key="$key" '$1 == key{print $2}' "$filename" 

    # use this awk if = can be present in value part as well 
    # awk -v key="^$key=" '$0 ~ key && sub(key, "")' "$filename" 
} 

これを呼び出すことができるように:

lookup search configfile.txt 

-F= awkコマンドの区切り文字を=に設定します。

はまた、単一引用符の内側$1$2あなたはそれが-fを受け入れる作るためにgetoptsになるはず列#1、#2、もう1つは、位置シェル変数$1と混同すべきではない、$2など

であることに注意してください、-kなどの型引数。

+0

ありがとうございます。 '$ include'はオプションですか? – dbmitch

+2

標準のシェルユーティリティには '$ include'指示文はありません。 'bash。/ otherscript.sh'を使ってシェルスクリプトの中から他のシェルスクリプトを呼び出すことはもちろん可能です。 – anubhava

+0

しかし、それはサブシェルを実行します。他の言語の '$ include'に相当するBashは間違いなく' source'です。 – tripleee

関連する問題