Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BashScript中的流控制和返回值_C_Bash_Expect_Zenity - Fatal编程技术网

BashScript中的流控制和返回值

BashScript中的流控制和返回值,c,bash,expect,zenity,C,Bash,Expect,Zenity,我对bash脚本非常陌生,我一直在开发一个小bash文件,它可以为我做一些事情。首先,我使用system()从C函数调用它,我希望脚本返回一个值(1表示错误,0表示确定)。这可能吗 int kinit() { int err = system("/home/bluemoon/Desktop/GSSExample/kinitScript.sh"); } 其次,我使用Zenity创建了一个弹出窗口来插入用户/密码。现在,根据用户所做的,应该发生多种情况。如果他关闭窗口或单击“取消”,则不会

我对bash脚本非常陌生,我一直在开发一个小bash文件,它可以为我做一些事情。首先,我使用system()从C函数调用它,我希望脚本返回一个值(1表示错误,0表示确定)。这可能吗

int kinit() {
    int err = system("/home/bluemoon/Desktop/GSSExample/kinitScript.sh");
}
其次,我使用Zenity创建了一个弹出窗口来插入用户/密码。现在,根据用户所做的,应该发生多种情况。如果他关闭窗口或单击“取消”,则不会发生任何事情。如果他单击“OK”,那么我应该检查输入(是否有空文本框或其他内容)

假设输入正确,我将使用Expect运行一个kinit程序(这是一个与Kerberos相关的promt)并登录。现在,如果密码正确,提示将关闭,脚本将返回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
如果我的操作不正常,expect命令将始终运行。取消或关闭Zenity窗口也总是导致出现“0”情况。我也尝试返回一个变量,但它说我只能从函数内部返回变量

如果有人能给我指点,我会很感激的。 戴夫

我希望脚本返回一个值

当然,只需在适当的位置使用
exit

exit: exit [n] Exit the shell. Exits the shell with a status of N. If N is omitted, the exit status is that of the last command executed.
我花了一段时间计算出退货状态乘以256,但我让一切正常。如果有效,Zenity适用于其他情况,我可以在成功时返回0,在错误时返回1。唯一缺少的是能够返回expect上的值等,但我仍然会将您的答案标记为correct=)