いくつかのアプリケーションをインストールするbashスクリプトを作成し、.confファイルを作成しました。ファイルを実行してすべてセットアップできるように、bashスクリプトでファイルを作成したかったのです。これよりも良い方法があるのか、それとも可能な限り最善の方法でやったのか。他にどんな選択肢があったのか疑問に思っています。
注:ファイルは機能します
if [ ! -e ~/.conf/file/path ]; then
touch ~/.conf/file/path
echo "
long
conf
list
here
..." >> ~/.conf/file/path
fi
スクリプトに関する限り、>
ファイルへのリダイレクトを使用できます。ファイルが存在しないかどうかを尋ねています(if ! [ -e ~/.conf/file/path ];
として表現する必要があります)。したがって、この特定のケースではappend
演算子を使用する必要はありません(正常に機能していても)。
長い複数行の設定をファイルに出力することに関して、Pantherはすでに ここでdocs を comment の下で Thomas's answer の下で使用することを示唆しています。これは、スクリプトに「ヘルプメッセージ」またはオプション情報を書き込むために個人的に使用する頻繁な手法です。
次のようなことを簡単に行うことができます。
bash-4.3$ cat > out.txt <<EOF
> parameter1="value 1"
> parameter2="value 2"
> EOF
bash-4.3$ cat out.txt
parameter1="value 1"
parameter2="value 2"
bash-4.3$
または、特定の関数write_config()
を作成して、スクリプトをより慣用的にすることもできます。
#!/usr/bin/env bash
# note usage of $HOME variable instead of ~
my_config="$HOME/my_conf_file.txt"
# declare all functions at the top
config_exists()[[ -e "$my_config" ]]
write_config(){
cat > "$my_config" <<EOF
parameter1="value 1"
parameter2="varlue 2"
EOF
}
if ! config_exists;
then
echo "config doesn't exist"
write_config
fi
ファイルが存在しない場合は、echo "text" >> /path/to/file
を実行します。
テキストのリダイレクトと追加の素晴らしい点は、出力がファイルパスであり、ファイルがまだ存在しない場合、>
または>>
が使用されているかどうかに関係なく、ファイルを作成することです。 。通常、ファイルをtouch
する必要はありません。 (ただし、ファイルが存在しないことが確実な場合は、>
の代わりに>>
を使用してください。>>
はファイルに追加するものですが、ファイルが存在しない場合は、 ...)
「長いconfリスト」が長すぎてシェルスクリプトの読みやすさが妨げられている場合は、スクリプトに付随する別のファイルに配置するだけではどうでしょうか。その後、シェルスクリプトで行う必要があるのは、そのファイルを宛先にコピーすることだけです。
if [ ! -e ~/.conf/file/path ]; then
cp /path/to/mytemplate ~/.conf/file/path
fi