何らかの理由で$ 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