![从其他 shell 运行 Expect 脚本](https://linux22.com/image/30513/%E4%BB%8E%E5%85%B6%E4%BB%96%20shell%20%E8%BF%90%E8%A1%8C%20Expect%20%E8%84%9A%E6%9C%AC.png)
/var/tmp/add_user.bash
我的目标是从脚本创建脚本并从脚本/var/tmp/create_script_add_user.bash
运行期望脚本( ) 。add_user.bash
create_script_add_user.bash
问题是,当我add_user.bash
从运行脚本时create_script_add_user.bash
,expect 陷入了这个问题:
Proceed? n)
看起来expect无法从标准输出中看到问题。但是当我运行脚本时/var/tmp/add_user.bash
,它工作正常。
为什么不能期望从其他脚本运行?以及如何解决这个问题呢?
内容/var/tmp/create_script_add_user.bash
#!/bin/bash
echo '#!/bin/bash
add_user=`cat << EOF
set timeout -1
spawn /var/tmp/add_user.bash user_name=OBAMA
expect n) { send "yes\r" }
expect eof
EOF`
/usr/local/bin/expect -c "$add_user"
'> /var/tmp/add_user.bash
chmod +x /var/tmp/add_user.bash
#need sleep for 5 seconds
( sleep 5 ; /var/tmp/add_user.bash ) &
内容/var/tmp/add_user.bash
#!/bin/bash
add_user=`cat << EOF
set timeout -1
spawn /var/tmp/add_user.bash user_name=OBAMA
expect n) { send "yes\r" }
expect eof
EOF`
/usr/local/bin/expect -c "$add_user"
答案1
我找到问题的解决方案
需要运行 /var/tmp/add_user.bash 而不使用进程“ & ”
例子
#need sleep for 5 seconds
sleep 5
source /var/tmp/add_user.bash
现在期望得到“n)“串并发送”y“作为答案