Существует ли лучший способ создать файл в ударе кроме использования касания и эха?

Я создал сценарий удара, который установил некоторые приложения и записал .conf файл. Я хотел, чтобы мой сценарий удара создал файл для меня так, я мог просто петлять, и он настроил все это. был ли лучший способ идти об этом, чем это или сделал я делаю это возможным лучшим способом. просто задавшись вопросом, что другие опции я имел.

Примечание: файл действительно работает

if [ ! -e ~/.conf/file/path ]; then
   touch ~/.conf/file/path
   echo "
    long
    conf
    list
    here
    ..." >> ~/.conf/file/path
fi
4
задан 18 October 2017 в 22:25

3 ответа

Насколько Ваш сценарий идет, можно использовать > перенаправление в файл. Вы спрашиваете, не существует ли файл (который должен лучше быть выражен как 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
2
ответ дан 1 December 2019 в 09:13

Просто сделайте echo "text" >> /path/to/file, если файл не существует.

прекрасная вещь о текстовом перенаправлении и добавлении состоит в том, что, если Ваш вывод является путем к файлу, и файл уже не существует, это создаст файл, независимо от того, если > или >> будет использоваться. Никакая потребность к touch файл вообще, обычно. (Хотя, если Вы уверены, файл не существует, просто используйте > вместо >>; >> должен добавить в файл, но если файл не существует, хорошо...)

5
ответ дан 1 December 2019 в 09:13

Если "длинный список conf" является таким длинным, что он препятствует удобочитаемости Вашего сценария оболочки, почему не только помещают его в отдельный файл, который сопровождает сценарий? Затем вся Ваша потребность сделать в сценарии оболочки является копией что файл месту назначения.

if [ ! -e ~/.conf/file/path ]; then
   cp /path/to/mytemplate ~/.conf/file/path
fi
0
ответ дан 1 December 2019 в 09:13

Другие вопросы по тегам:

Похожие вопросы: