最初に開いたときにユーザーに情報を求めるシェルスクリプトに取り組んでいます。この情報は、ユーザーがプログラムを開くたびに同じ質問に答える必要がないように、将来の使用のために構成ファイルに保存する必要があります。もちろん、スクリプトを使うたびに設定ファイルに情報が入っているかどうかを確認するif文を書く予定なのですが、設定ファイルの作り方がわかりません。シェルスクリプト自体からこれを行う方法を知りたいので、誰かが私のスクリプトをダウンロードして使用すると、構成ファイルが作成されます。また、スクリプトから構成ファイルに情報を追加する方法も知りたいです。ご協力いただきありがとうございます。
3 に答える
私がよく目にする解決策は、次のような構成ファイルを書き出すことです。
cat <<EOF > ~/.app/config
var1=$var1
var2=$var2
EOF
次に、その構成ファイルは適切なシェル スクリプト自体であり、次のように、起動時にシェル スクリプトによって取得できます。
[ -e ~/.app/config ] && source ~/.app/config
それを (コマンドとして実行するのではなく) ソースすると、それが定義するすべての変数が、それをソースしたスクリプトで確実に表示されます。
そしてもちろん、ソースを入手した後、新しいバージョンを書き出す前に、ユーザー主導のカスタマイズを行いたいと思うでしょう。
買い手責任負担
この方法を使用すると、手早く汚れたものや、自分だけが触れるものに使用できます。ただし、スクリプトをソースすると、その中のすべてのコードが現在のセッションで実行されます。つまりrm -rf /
、メイン スクリプトで定義した関数や変数を再定義してオーバーライドすることもできます。
次のようなコードを使用できます。
RC_PATH="~/.myscriptrc"
echo $var1 > $RC_PATH
echo $var2 >> $RC_PATH
var1
改行でvar2
区切られ、~/.myscriptrc
設定ファイルに保存されます。したがって、 と が与えられるvar1=Foo
とvar2=Bar
、 ~/.myscriptrc
ファイルは次のようになります。
Foo
Bar
ここでも、SO が個人開発の中心であると考えている 1 つの OP です。あなたは彼の質問に似た他の質問を見るために仕事をすることさえしませんでした:これまたはこれと他のもの.
深刻な問題が発生する可能性があるため、解決策をお勧めします。
- Googleでbash構成ファイルのセキュリティを検索
危険なので、構成変数は決して 見つかりません。source
たとえばsource
、次の構成ファイルを作成するとどうなりますか?
MAINPATH=/some/path/here;rm -rf / &
だから、あなたはすべきです
- アプリのデフォルトをコードにハードコーディングし、
- また、構成ファイルを読み取るときは、保存された値に危険なもの (上記のようなもの) が含まれていないことを確認する必要があるため、文字やバックティックなどを含めないでください。[A-Za-z0-9_/] のみを含み、他を含まない場合に最適です。これは設定値のサニタイズと呼ばれます。
;
&
perl、awkなどの構成ファイル解析用のより強力なツールを使用して、できる限りのことをしてください。
次回は、ここで質問する前に、Google または SO の検索を使用して回答を取得してください
Ps:メッセージで申し訳ありません。機嫌が悪いので目が覚めたのかもしれませんが、自分で解決策を見つけようとさえしなかったOPに腹を立て始めています...