diff options
Diffstat (limited to 'linuxinstall/shell/execCmdBySu.sh')
| -rw-r--r-- | linuxinstall/shell/execCmdBySu.sh | 78 |
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 |
