summaryrefslogtreecommitdiff
path: root/linuxinstall/shell/execCmdBySu.sh
diff options
context:
space:
mode:
Diffstat (limited to 'linuxinstall/shell/execCmdBySu.sh')
-rw-r--r--linuxinstall/shell/execCmdBySu.sh78
1 files changed, 78 insertions, 0 deletions
diff --git a/linuxinstall/shell/execCmdBySu.sh b/linuxinstall/shell/execCmdBySu.sh
new file mode 100644
index 0000000..4a94436
--- /dev/null
+++ b/linuxinstall/shell/execCmdBySu.sh
@@ -0,0 +1,78 @@
+#!/usr/bin/expect
+
+if {$argc!=4&&$argc!=3} {
+ send_user "usage: execCmdBySu.sh resultFlag command name \[password\]\n"
+ exit 1
+}
+# 0��ִ�����ȡ�ý����1��ִ��&��̨����
+set resultFlag [lindex $argv 0]
+set cmd [lindex $argv 1]
+set user [lindex $argv 2]
+set pass [lindex $argv 3]
+
+set timeout 30
+set flag 0
+
+#�رտ���̨�����Ϣ
+log_user 0
+
+spawn whoami
+expect "root" {set flag 1}
+
+# ��ִ������${cmd}��׷��"echo $?",Ϊ��ȡcmd�������е�ʵ�ʽ��, �����ε���������ص������Ϣ
+if {$resultFlag==0} {
+ spawn su - -c "${cmd};echo $?" ${user}
+
+ #��ǰ��¼�û�����root����������
+ if {$flag==0} {
+ expect {
+ "����*" {send ${pass}\r}
+ "password*" {send ${pass}\r}
+ default {
+ send_error "error\n"
+ exit 2
+ }
+ }
+ }
+
+ #�򿪿���̨�����Ϣ
+ log_user 1
+
+ expect {
+ "* ���벻��ȷ*" {exit 1}
+ #----�˴���Ŀ����Ϊ���ܶ�ȡ������������
+ eof {exit 0}
+ }
+
+} else {
+ spawn su - -c "${cmd}" ${user}
+
+ #��ǰ��¼�û�����root����������
+ if {$flag==0} {
+ expect {
+ "����*" {send ${pass}\r}
+ "password*" {send ${pass}\r}
+ default {
+ send_error "error\n"
+ exit 2
+ }
+ }
+ }
+ expect {
+ "* ���벻��ȷ*" {exit 1}
+ #----Ϊ��&��̨������������������
+ eof {
+ send_user "ok\n"
+ exit 0
+ }
+ }
+}
+interact
+exit 0
+
+
+#overlay chess
+#overlay program args
+#disconnect
+#close -onexec 0 -i ${spawn_id}
+#remove_nulls 1 \ No newline at end of file