如果之前有人问过道歉,我无法找到答案......
我为OS X创建了一个bash脚本来安装AFP共享。该脚本成功运行,并允许用户使用cocoa对话框
将其用户名和密码键入图形弹出窗口我的问题是,如果输入的用户名和密码不正确,我希望能够显示一个新的弹出窗口来解释这一点。
我试图根据脚本的退出状态执行此操作,但无论挂载是否成功,脚本都返回0
脚本如下;
cd=/etc/cocoaDialog.app/Contents/MacOS/cocoaDialog
rvUsername=($($cd standard-inputbox --title "Network Mount" --informative-text "Please enter your username"))
username=${rvUsername[1]}
rvPassword=($($cd secure-standard-inputbox --title "Network Mount" --informative-text "Please enter your password"))
password=${rvPassword[1]}
mkdir "/Volumes/Test"
expect <<- DONE
set timeout -1
spawn /sbin/mount_afp -i "afp://servername/Software" /Volumes/Test
expect "*?ser:*"
send "$username\n"
expect "*?assword:*"
send "$password\r"
expect EOF
DONE
如果我通过Terminal或Textmate运行,我会收到以下内容(例如)
spawn /sbin/mount_afp -i afp://server/Software /Volumes/Test
User: username
Password:
mount_afp: the volume is already mounted
Program exited with code #0 after 7.32 seconds.
所以mount_afp正在给我一条消息,然后我想在我的脚本中使用...但是退出代码为0,我不知道如何获取该消息以便使用
有什么想法吗? (希望有意义!)
答案 0 :(得分:1)
要获取衍生命令的退出代码,请使用以下内容:
# wait for the command to end : wait for the prompt $ followed by space
expect "\\$ "
send "echo \$?\r"
expect -re "(\\d+)" {
set result $expect_out(1,string)
}
send_user "command exit with result code : $result"
这将获取变量$?
的内容(这是当前结束命令的退出代码)并将其保存到$result
。
答案 1 :(得分:0)
感谢所有回复,帮助我指明正确的方向
我最终采用这种方法并将expect命令设置为变量
output=$(su -l $loggedInUser -c expect <<- DONE
set timeout -1
spawn /sbin/mount_afp -i "afp://$serverName" /Volumes/mount
expect "*?ser:*"
send "$username\n"
expect "*?assword:*"
send "$password\r"
expect EOF
DONE)