shell sript para ler o arquivo de origem e usar a chave no script

2
#!/bin/bash
source /data/output/QAScripts/conf.ini
var=$(path)
echo $var

conf.ini é o arquivo de configuração que possui LSTpath=/data/bb/loader

Eu fico abaixo do erro. Para onde estou indo errado?

./file LST
 line 8: LSTpath: command not found
    
por Test priya 04.08.2015 / 17:36

3 respostas

3

Você pode resolvê-lo usando eval .

eval - construct command by concatenating arguments

Modifique seu script da seguinte forma:

#!/bin/bash
source /data/output/QAScripts/conf.ini
eval var='$'""path
echo $var

execute-o assim:

$ ./foo LST
/data/bb/loader

onde

$ cat /data/output/QAScripts/conf.ini
LSTpath=/data/bb/loader
    
por souravc 04.08.2015 / 18:01
1

Usando awk , não gosto de eval ;)

Seu var=$(path) executa o primeiro parâmetro do seu script ( ) concatenado com path como um comando. Portanto, o erro.

Seu novo script

#!/bin/bash
var=$(awk -F= '/^'""'path/ {print }' /data/output/QAScripts/conf.ini)
echo "$var"

Seu /data/output/QAScripts/conf.ini

LSTpath=/data/bb/loader

Exemplo

$ ./foo LST
/data/bb/loader
    
por A.B. 04.08.2015 / 17:41
0

Usando grep , eval: (

Assumindo que source é usado para carregar as variáveis para obter o caminho de conf.ini

script.sh

#!/bin/bash
var='grep  /data/output/QAScripts/conf.ini | grep -oP '[^''path\=](.*)''
echo $var

conf.ini

LSTpath=/data/bb/loader
#following added to demonstrate
LSApath=/data/bb/A
LSBpath=/data/bb/B
LSCpath=/data/bb/C

Saída: Exibe de acordo com arg var

root@controller:~# ./script.sh LST
/data/bb/loader
root@controller:~# ./script.sh LSA
/data/bb/A
root@controller:~# ./script.sh LSB
/data/bb/B
root@controller:~# ./script.sh LSC
/data/bb/C
root@controller:~#

Obrigado:)

    
por New Chethan 05.08.2015 / 10:06