Existe uma maneira melhor de criar um arquivo no bash além de usar toque e eco?

4

Eu criei um script bash que instalou alguns aplicativos e escreveu um arquivo .conf. Eu queria que meu script bash criasse o arquivo para que eu pudesse executar o arquivo e configurar tudo. Havia uma maneira melhor de fazer isso do que isso ou eu o fiz da melhor maneira possível? apenas me perguntando que outras opções eu tinha.

Nota: o arquivo funciona

if [ ! -e ~/.conf/file/path ]; then
   touch ~/.conf/file/path
   echo "
    long
    conf
    list
    here
    ..." >> ~/.conf/file/path
fi
    
por Jermayne Williams 18.10.2017 / 21:25

3 respostas

2

No que diz respeito ao seu script, você pode usar o redirecionamento > no arquivo. Você está perguntando se o arquivo não existe (o que deve ser melhor expresso como if ! [ -e ~/.conf/file/path ]; ), portanto, não há necessidade de usar o operador append neste caso específico (mesmo que funcione bem).

Quanto à impressão de múltiplas configurações no arquivo, a Panther já sugeriu o uso de aqui em sua comentário em a resposta de Thomas . Esta é uma técnica frequente que eu pessoalmente uso para escrever "mensagem de ajuda" ou informações de opções em meus scripts

Você poderia facilmente fazer algo assim:

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$ 

Ou, como alternativa, crie uma função específica, write_config() para tornar seu script mais idiomático, por assim dizer:

#!/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
    
por Sergiy Kolodyazhnyy 31.10.2017 / 02:17
5

Apenas faça echo "text" >> /path/to/file se o arquivo não existir.

O mais interessante sobre redirecionamento de texto e anexação é que, se a saída for um caminho de arquivo e o arquivo ainda não existir, ele criará o arquivo, independentemente de se > ou >> for usado. Não é necessário touch do arquivo, normalmente. (Embora, se você tiver certeza de que o arquivo não existe, use > em vez de >> ; >> para acrescentar a um arquivo, mas se o arquivo não existir, bem ...)

    
por Thomas Ward 18.10.2017 / 21:31
0

Se a "lista longa longa" é tão longa que impede a legibilidade do seu script de shell, por que não colocá-lo em um arquivo separado que acompanha o script? Então, tudo que você precisa fazer no script de shell é copiar esse arquivo para o destino.

if [ ! -e ~/.conf/file/path ]; then
   cp /path/to/mytemplate ~/.conf/file/path
fi
    
por thomasrutter 03.11.2017 / 01:32