0

Apple Open Directory (LDAP) サーバーに対してパスワードが正しい (または正しくない) かどうかをテストする単純なシェル スクリプトがあります。

私が望むのは、「ノード/LDAPv3/1の認証...」というgoblygookエラーメッセージを単純に失い、代わりに「パスワードが一致しません」などの独自の言語を挿入することです.

これが今起こっていることです:

bash-3.2# test-password 

Enter username you'd like to test password for:
jdoe

Enter Password to test for jdoe
asdasdasd
Authentication for node /LDAPv3/127.0.0.1 failed. (-14090, eDSAuthFailed)
<dscl_cmd> DS Error: -14090 (eDSAuthFailed)

私が好むのは:

bash-3.2# test-password 

Enter username you'd like to test password for:
jdoe

Enter Password to test for jdoe
asdasdasd
 Password matches!

したがって、std outエラーメッセージがこもる方法を知る必要があります...

スクリプトは次のとおりです。

#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH
echo
echo Enter username you\'d like to test password for:
read USERNAME

echo
echo Enter Password to test for "$USERNAME"
read PASSWORD
/usr/bin/dscl /LDAPv3/127.0.0.1 auth $USERNAME $PASSWORD

if [ "$?" = "0" ]; then
       echo "Password is correct"
       exit 0

fi
4

2 に答える 2

3

エラーメッセージが書かれている場所によって異なります。正常に動作する UNIX プログラムは、エラーを stderr に書き込みます。

/usr/bin/dscl /LDAPv3/127.0.0.1 auth $USERNAME $PASSWORD 2> /dev/null  # stderr
/usr/bin/dscl /LDAPv3/127.0.0.1 auth $USERNAME $PASSWORD  > /dev/null  # stdout
/usr/bin/dscl /LDAPv3/127.0.0.1 auth $USERNAME $PASSWORD &> /dev/null  # both

if価値があるのは、これをステートメントと組み合わせることができるということです。また、前に明示的な/usr/binパスは必要ありません。

if dscl /LDAPv3/127.0.0.1 auth $USERNAME $PASSWORD 2> /dev/null; then
    : # success
else
    : # failure
fi
于 2012-11-27T04:57:37.657 に答える
2

標準出力とエラーを捨てるだけです:

/usr/bin/dscl /LDAPv3/127.0.0.1 auth $USERNAME $PASSWORD >/dev/null 2>&1

dsclプログラムがデバイスを開いて/dev/tty書き込みを行うなどのよこしまなことをしない限り、それですべてが処理されます。

于 2012-11-27T04:58:38.473 に答える