valor bash de $ LINE não está sendo mostrado quando definido como val = '$ LINE'

2

Eu tenho o seguinte script bash por algum motivo $ LINE valor não está chegando em val =. Eu posso ver a linha do arquivo é lido pode ser exibido por cada $ LINE, mas quando definido no val .. não está mostrando.

  #/bin/bash
  while read LINE
  do
       echo "Processing:" $LINE
       val='ldapsearch -h localhost -w test -z 0 -x -b 'dc=test,dc=org' -D "cn=admin,dc=testing,dc=com" id=$LINE | grep val'
       echo $LINE "," $val
  done < inputfile.txt

alguma ideia do que estou fazendo de errado aqui.

    
por Raza 03.05.2014 / 02:29

2 respostas

2

Com base no seu problema, parece que você está encontrando um problema com os resultados do seu ldapsearch .

Correção de potencial # 1

Para iniciantes, eu habilitaria a saída detalhada para que você possa ver como a parte do backtick de seu comando está sendo expandida.

set -x
val='ldapsearch -h localhost -w test -z 0 -x -b 'dc=test,dc=org' -D \
     "cn=admin,dc=testing,dc=com" id=$LINE | grep val'
set +x
Correção de potencial # 2

Eu também o altero para que use a notação $() em vez dos backticks.

val=$(ldapsearch -h localhost -w test -z 0 -x -b 'dc=test,dc=org' -D \
     "cn=admin,dc=testing,dc=com" id=$LINE | grep val)
Correção de potencial # 3

Também gostaria de citar o conteúdo de $LINE quando passado para id= .

val=$(ldapsearch -h localhost -w test -z 0 -x -b 'dc=test,dc=org' -D \
     "cn=admin,dc=testing,dc=com" id="$LINE" | grep val)
Correção de potencial # 4

Por fim, tento alterar o pipe de | para |& , para que você analise STDOUT e STDERR em ldapsearch .

Dica geral

Você sempre pode habilitar a saída completa detalhada do Bash adicionando a opção -x à linha shebang.

#!/bin/bash -x
...script...
    
por 03.05.2014 / 02:44
0

Esse é provavelmente um problema de citação. Em vez de id=$LINE você deve (em geral) usar id="$LINE" . Mesmo para echo $LINE .

    
por 03.05.2014 / 02:40