어떤 이유로 $LINE 값이 val=에 나타나지 않는 다음 bash 스크립트가 있습니다. 각 $LINE은 파일에서 읽은 행을 표시할 수 있지만 val에 정의된 경우에는 표시되지 않습니다.
#/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
내가 여기서 뭘 잘못하고 있는지 아시나요?
답변1
귀하의 질문에 따르면 귀하의 ldapsearch
.
우선 명령의 백틱 부분이 어떻게 확장되는지 확인할 수 있도록 자세한 출력을 활성화하겠습니다.
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
잠재적인 수정 #2
$()
또한 백틱 대신 기호를 사용하도록 변경하겠습니다 .
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)
잠재적인 수정 #3
$LINE
또한 에 전달될 때 내용을 인용하겠습니다 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)
잠재적인 수정 #4
마지막으로 에서 STDOUT 및 STDERR을 구문 분석할 수 있도록 파이프를 에서 |
으로 변경해 보았습니다 .|&
ldapsearch
일반적인 팁
shebang 줄에 스위치를 추가하면 언제든지 -x
Bash의 전체 상세 출력을 활성화 할 수 있습니다.
#!/bin/bash -x
...script...
답변2
이는 인용 문제일 수 있습니다. 대신 id=$LINE
(보통 ) id="$LINE"
.echo $LINE