Я создал сценарий 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 уже намекнул на использование здесь документов в своем комментарии под ответом Томаса. Это частая техника, которую я лично использую для написания «справочного сообщения» или информации о параметрах в моих сценариях
. Вы можете легко сделать что-то вроде этого:
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
Что касается вашего скрипта, вы можете использовать перенаправление > в файл. Вы спрашиваете, существует ли файл (лучше его следует выражать как if ! [ -e ~/.conf/file/path ];), поэтому нет необходимости использовать оператор append в этом конкретном случае (хотя он работает хорошо).
Что касается печати длинной многострочной конфигурации в файл, Panther уже намекнул на использование здесь документов в своем комментарии под ответом Томаса. Это частая техника, которую я лично использую для написания «справочного сообщения» или информации о параметрах в моих сценариях
. Вы можете легко сделать что-то вроде этого:
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
Что касается вашего скрипта, вы можете использовать перенаправление > в файл. Вы спрашиваете, существует ли файл (лучше его следует выражать как if ! [ -e ~/.conf/file/path ];), поэтому нет необходимости использовать оператор append в этом конкретном случае (хотя он работает хорошо).
Что касается печати длинной многострочной конфигурации в файл, Panther уже намекнул на использование здесь документов в своем комментарии под ответом Томаса. Это частая техника, которую я лично использую для написания «справочного сообщения» или информации о параметрах в моих сценариях
. Вы можете легко сделать что-то вроде этого:
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. (Хотя, если вы уверены, что файл не существует, просто используйте > вместо >>; >> следует добавить в файл, но если файл не существует, ну ...)
Если «длинный список сообщений» настолько длинный, что он препятствует читаемости вашего сценария оболочки, почему бы просто не поместить его в отдельный файл, который сопровождает скрипт? Тогда все, что вам нужно сделать в сценарии оболочки, это скопировать этот файл в пункт назначения.
if [ ! -e ~/.conf/file/path ]; then
cp /path/to/mytemplate ~/.conf/file/path
fi
Просто выполните echo "text" >> /path/to/file, если файл не существует.
Прекрасная вещь о перенаправлении и добавлении текста заключается в том, что если ваш вывод является файловым путем, а файл еще не существует, он создаст файл, независимо от того, используется ли > или >>. Обычно нет файла touch. (Хотя, если вы уверены, что файл не существует, просто используйте > вместо >>; >> следует добавить в файл, но если файл не существует, ну ...)
Если «длинный список сообщений» настолько длинный, что он препятствует читаемости вашего сценария оболочки, почему бы просто не поместить его в отдельный файл, который сопровождает скрипт? Тогда все, что вам нужно сделать в сценарии оболочки, это скопировать этот файл в пункт назначения.
if [ ! -e ~/.conf/file/path ]; then
cp /path/to/mytemplate ~/.conf/file/path
fi
Просто выполните echo "text" >> /path/to/file, если файл не существует.
Прекрасная вещь о перенаправлении и добавлении текста заключается в том, что если ваш вывод является файловым путем, а файл еще не существует, он создаст файл, независимо от того, используется ли > или >>. Обычно нет файла touch. (Хотя, если вы уверены, что файл не существует, просто используйте > вместо >>; >> следует добавить в файл, но если файл не существует, ну ...)
Если «длинный список сообщений» настолько длинный, что он препятствует читаемости вашего сценария оболочки, почему бы просто не поместить его в отдельный файл, который сопровождает скрипт? Тогда все, что вам нужно сделать в сценарии оболочки, это скопировать этот файл в пункт назначения.
if [ ! -e ~/.conf/file/path ]; then
cp /path/to/mytemplate ~/.conf/file/path
fi