私は bash スクリプトにまったく慣れていないので、いくつかのことを実行できる小さな bash ファイルに取り組んでいます。まず、system() を使用して C 関数からこれを呼び出しています。スクリプトが値 (エラーの場合は 1、OK の場合は 0) を返すようにします。これは可能ですか?
int kinit() {
int err = system("/home/bluemoon/Desktop/GSSExample/kinitScript.sh");
}
次に、Zenity を使用して、ユーザー/パスワードを挿入するためのポップアップ ウィンドウを作成することができました。さて、ユーザーの行動に応じて、複数のことが起こるはずです。ウィンドウを閉じるか「キャンセル」をクリックしても、何も起こらないはずです。彼が「OK」をクリックした場合は、入力を確認する必要があります(空のテキストボックスなど)。
入力が正しいと仮定して、Expect を使用して kinit プログラム (Kerberos に関連するプロンプト) を実行し、ログインします。パスワードが正しい場合、プロンプトは閉じられ、スクリプトは 0 を返します。そうでない場合、プロンプトは「Kinit: user not found」のようなものが表示されます。エラーが発生した場合(ウィンドウを閉じる、キャンセルをクリックする、または資格情報が間違っている)、スクリプトで1を返し、成功すると0を返したいと思いました。
#!/bin/bash
noText=""
ENTRY=`zenity --password --username`
case $? in
0)
USER=`echo $ENTRY | cut -d'|' -f1`
PW=`echo $ENTRY | cut -d'|' -f2`
if [ "$USER"!="$noText" -a "$PW"!="$noText" ]
then
/usr/bin/expect -c 'spawn kinit '`echo $USER`'; expect "Password for '`echo $USER`':" { send "'`echo $PW`'\r" }; interact'
fi
;;
1)
echo "Stop login.";;
-1)
echo "An unexpected error has occurred.";;
esac
if が正しく機能していない場合、expect コマンドが常に実行されます。Zenity ウィンドウをキャンセルまたは閉じると、常にケース "0" になります。私も変数を返そうとしましたが、関数内からのみ変数を返すことができると言われていますか?
誰かが私にいくつかの指針を与えることができれば、私はそれを感謝します. デイブ