You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启动时自动运行Bash脚本安装Squid的交互输入自动化问题

解决自动完成Squid安装脚本交互的问题

你遇到的核心问题是:原来的脚本里,bash spi -rhel7执行后会立刻等待用户输入,但你后面的echo命令是在这个命令执行完成后才会运行,所以那些输入内容根本没被spi脚本接收到。下面给你几种可靠的自动交互方案:

方法1:用管道传递输入

把需要输入的内容通过管道直接传给spi命令,确保输入顺序完全匹配脚本的提示(用户名→密码→重复密码→yes):

#!/bin/sh
PROXY_USER=user1
PROXY_PASS=password1

wget https://raw.githubusercontent.com/hidden-refuge/spi/master/spi && \
echo -e "$PROXY_USER\n$PROXY_PASS\n$PROXY_PASS\nyes" | bash spi -rhel7 && \
rm spi

这里用echo -e来解析换行符\n,让每一行对应一个交互提示的输入,完美模拟手动输入的顺序。

方法2:用Here Document(更易读)

Here Document 可以让你以更直观的方式编写需要输入的内容,可读性更强,后期维护也方便:

#!/bin/sh
PROXY_USER=user1
PROXY_PASS=password1

wget https://raw.githubusercontent.com/hidden-refuge/spi/master/spi && \
bash spi -rhel7 << EOF
$PROXY_USER
$PROXY_PASS
$PROXY_PASS
yes
EOF
rm spi

<< EOF和EOF之间的内容会被当作标准输入直接传给bash spi -rhel7,完全复刻手动输入的流程。

方法3:用Expect工具(最可靠,适合复杂交互)

如果上面两种方法因为spi脚本的特殊交互逻辑(比如用read -s隐藏密码输入、有超时限制或者提示文本有变化)失效,可以用expect工具精准匹配提示并自动输入:

首先确保系统安装了expect(RHEL7上可以用yum install expect -y安装),然后编写一个expect脚本:

#!/usr/bin/expect
set PROXY_USER "user1"
set PROXY_PASS "password1"
set timeout 30

spawn bash spi -rhel7

expect "Enter username"
send "$PROXY_USER\r"

expect "Enter password"
send "$PROXY_PASS\r"

expect "Renter password"
send "$PROXY_PASS\r"

expect -re "yes/no"
send "yes\r"

expect eof

然后在你的主脚本里调用这个expect脚本:

#!/bin/sh
wget https://raw.githubusercontent.com/hidden-refuge/spi/master/spi && \
yum install expect -y && \
# 把上面的expect代码保存为auto_spi.exp,然后执行
expect auto_spi.exp && \
rm spi auto_spi.exp

这种方法会精准匹配每个提示字符串,然后发送对应的输入,几乎能应对所有复杂的交互场景。

注意事项

  • 确保PROXY_PASS的复杂度符合spi脚本的要求(比如长度、特殊字符限制等),避免因为密码不符合规则导致安装失败。
  • 如果wget下载慢或者失败,可以考虑用curl替代:curl -O https://raw.githubusercontent.com/hidden-refuge/spi/master/spi。

内容的提问来源于stack exchange,提问作者lomo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:20:30