Я создал сценарий удара, который установил некоторые приложения и записал .conf файл. Я хотел, чтобы мой сценарий удара создал файл для меня так, я мог просто петлять, и он настроил все это. был ли лучший способ идти об этом, чем это или сделал я делаю это возможным лучшим способом. просто задавшись вопросом, что другие опции я имел.
Примечание: файл действительно работает
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
оператор в данном случае (даже при том, что это работает хорошо).
Что касается печати длинной многострочной конфигурации в файл, Пантера уже намекнула на использование здесь документов в его комментарии в соответствии с ответом Thomas. Это - частая техника, которую я лично использую для записи "сообщения справки" или информации об опциях в моих сценариях
Вы могли легко сделать что-то вроде этого:
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