J'ai créé un script bash qui a installé certaines applications et écrit un fichier .conf. Je voulais que mon script bash crée le fichier pour moi afin que je puisse simplement exécuter le fichier et tout configurer. y avait-il une meilleure façon de s'y prendre que cela ou je l'ai fait de la meilleure façon possible. je me demandais simplement quelles autres options j'avais.
Note: le fichier fonctionne
if [ ! -e ~/.conf/file/path ]; then
touch ~/.conf/file/path
echo "
long
conf
list
here
..." >> ~/.conf/file/path
fi
En ce qui concerne votre script, vous pouvez utiliser la redirection >
vers un fichier. Vous demandez si le fichier n'existe pas (ce qui devrait être mieux exprimé par if ! [ -e ~/.conf/file/path ];
]), il n'est donc pas nécessaire d'utiliser l'opérateur append
dans ce cas particulier (même si cela fonctionne correctement).
En ce qui concerne l’impression d’une longue configuration multiligne dans le fichier, Panther a déjà fait allusion à l’utilisation de ici docs dans son commentaire sous réponse de Thomas . C'est une technique fréquente que j'utilise personnellement pour écrire des "messages d'aide" ou des informations sur les options dans mes scripts.
Vous pouvez facilement faire quelque chose comme ça:
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$
Vous pouvez également créer une fonction spécifique, write_config()
pour rendre votre script plus idiomatique, pour ainsi dire:
#!/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
Il suffit de faire echo "text" >> /path/to/file
si le fichier n'existe pas.
La bonne chose à propos de la redirection de texte et des ajouts est que si votre sortie est un chemin de fichier et que le fichier n'existe pas déjà, il créera le fichier, que >
ou >>
soit utilisé. . Pas besoin de touch
le fichier du tout, généralement. (Cependant, si vous êtes sûr que le fichier n'existe pas, utilisez simplement >
au lieu de >>
; >>
pour l'ajouter à un fichier, mais si le fichier n'existe pas, alors ...)
Si la "longue liste de configuration" est si longue qu'elle gêne la lisibilité de votre script Shell, pourquoi ne pas la placer simplement dans un fichier séparé qui l'accompagne? Ensuite, tout ce que vous devez faire dans le script Shell est de copier ce fichier dans la destination.
if [ ! -e ~/.conf/file/path ]; then
cp /path/to/mytemplate ~/.conf/file/path
fi