
Eu tenho uma pasta chamada MyProperties
e contém vários .properties
arquivos como 1.properties
, e 2.properties
assim 3.properties
por diante. Cada arquivo contém algo como:
keyname=value
O que devo escrever aqui como valor no arquivo de propriedades para que ele seja atribuído ou substituído? Como faço para iterar sobre eles em um script bash e atribuir o valor à chave?
Pseudo-código:
#!/bin/bash
valuetobepassed="something"
#iterate over each file in the folder and replace/assign value corresponding to keyname
Responder1
Você pode usar sed
para substituir valores em arquivos:
#!/bin/bash
new_value=5
for f_name in MyProperties/*.properties; do
sed -i "s/^keyname=.*$/keyname=$new_value/" "$f_name"
done
Responder2
Se você realmente tiver vários arquivos com varName=value
pares, tudo o que você precisa fazer éfonteisto. Portanto, itere todos .properties
os arquivos e forneça cada um deles:
for file in /path/to/MyProperties/*.properties; do
. "$file"
done
Agora você tem todas as suas variáveis definidas no seu script. Ilustrar:
$ cat foo.properties
foo="bar"
$ echo "$foo" ## no value
$ . ./foo.properties
$ echo "$foo"
bar
Isso pressupõe que seus .properties
arquivos tenhamnada além de pares variável = valor. Ao sourcing, cada linha do arquivo será executada no shell executando o script que faz o sourcing. Assim, quaisquer comandos em seus .properties
arquivos também serão executados. E qualquer invasor com acesso MyProperties
pode adicionar um comando malicioso lá. Portanto, faça isso apenas se tiver certeza do conteúdo dos arquivos.
Observe que é importante que o caminho fornecido ao .
builtin contenha um /
caractere (daí o ./foo.properties
acima), caso contrário, o arquivo será procurado nos diretórios de $PATH
em vez do diretório atual (no caso bash
e quando não estiver no modo de conformidade POSIX, . file
procura por file
no diretório de trabalho atual se não tiver sido encontrado em $PATH
).