linuxshell执⾏中需要交互输⼊回车,YesNOYN
最近写⾃动安装脚本遇到redis-server安装的时候,需要输⼊3个回车,对此尝试⽆果,最后google⽐较满意的解决办法:
shell 脚本需要交互,⽐如输⼊回车,输⼊YES/NO Y/N之类进⾏选择
Linux 中shell脚本运⾏时经常需要进⾏交互,⽐如安装软件的过程中对license声明的确认,需要输⼊yes,回车之类的确认信息。这个在⾃动化安装的时候就会是个问题。
1、通常对于这个问题⽐较灵活的解决⽅法就是TCL的Expect。但Expect还需要另外安装,平台通⽤性不⾼,⽐较⿇烦。
2、另外⼀些简单的⽅法倒也是有,不过可⽤性不⾼,特别是对要求多次交互就吃⼒了。但怎么说其还是能解决⼤多数的问题,因为复杂的情况还是⽐较少的。
⽐如要⼀个调⽤⼀个安装脚本 : installWAS.sh, 这个脚本要求输⼊回车,
则可以:echo | installWAS.sh;如果要求输⼊yes|no,加回车,则可以
echo yes|installWAS.sh. 这下⾃动化安装就有希望了。
shell代码
再有⼀下的代码也可以带来⼀些思路:
[0 No.2015 huan@huan ~/tmp]$ cat foo
read -s -n1 -p "Press any key to continue ... "
echo "Your inputs: $REPLY"
[0 No.2016 huan@huan ~/tmp]$ ./foo < /dev/null
Your inputs:
[0 No.2017 huan@huan ~/tmp]$
最后具体实现:
[root@localhost opt]# cat cache.sh
#!/bin/bash
yum install -y gcc-c++ tcl
cd /opt
#cache
wget dis.io/releases/redis-3.0.
#------------------------------------------------------------------------------------#
#编译源程序
tar xf redis-3.0.
cd redis-3.0.0
make && cd src && make install
cd /opt/redis-3.0.0/utils
echo | /bin/bash install_server.sh
mv /etc/f /etc/f
mv /etc/init.d/redis_6379 /etc/init.d/redis
sed -i "f@" /etc/init.d/redis
sed -ine "65s/# bind 127.0.0.1/bind 0.0.0.0/" /etc/f
sed -ine "393 i\requirepass Bs123456A" /etc/f
#默认情况下,redis不是在后台运⾏的,我们需要把开启的redis后台运⾏,将daemonize的值改为yes
echo "vm.overcommit_memory=1">>/f
sysctl -p
[root@localhost opt]#

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。