You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无法修改Bash脚本时,如何实现交互式输入或外部传参?

关于Bash脚本的两个问题解答

1. 交互式执行脚本时是否支持用户输入?

当然支持!如果你直接在终端里交互式运行这个脚本(比如执行 ./your_script.sh),当脚本走到 read INFO 这一行时,终端会自动暂停,等你输入yesno这类内容,输入完回车后脚本就会继续往下跑。

这是因为read命令默认从**标准输入(stdin)**读取数据,而交互式Shell的stdin就是你的终端,所以完全没问题。除非脚本被重定向了输入(比如用管道或文件当输入源),否则交互式输入都是正常工作的。

2. 能否从脚本外部(远程)设置脚本内的变量?

这里得说明下:你的脚本是用readINFO变量赋值的,read会覆盖变量之前的任何值,所以直接设置环境变量的方法不会生效,但我们可以通过给脚本的标准输入传值的方式,间接实现“设置”变量的效果:

本地外部传值

  • 用管道传递输入:

    echo "yes" | ./your_script.sh
    

    这样read INFO会读取管道里的yes,自动赋值给变量,不用手动输入。

  • 用Here字符串传递输入:

    ./your_script.sh <<< "yes"
    

    这和管道效果类似,但语法更简洁,适合短字符串输入。

远程传值(通过SSH)

如果要远程执行脚本并传入值,把上面的方法结合到SSH命令里就行:

ssh user@remote_host 'echo "yes" | /path/to/your_script.sh'
# 或者用Here字符串写法
ssh user@remote_host '/path/to/your_script.sh <<< "yes"'

这样远程执行脚本时,read会自动读取传入的内容,不需要交互式操作。

另外就算脚本里的read带提示(比如read -p "确认操作?" INFO),上面的方法依然有效——因为read的提示信息会输出到标准错误(stderr),我们传递的是标准输入(stdin),两者互不干扰。


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

火山引擎 最新活动