linux shell執行中需要交互輸入回車,Yes/NO Y/N


最近寫自動安裝腳本遇到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. 這下自動化安裝就有希望了。
再有一下的代碼也可以帶來一些思路:
[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 http://download.redis.io/releases/redis-3.0.0.tar.gz
#------------------------------------------------------------------------------------#
#編譯源程序
tar xf redis-3.0.0.tar.gz 
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/redis/6379.conf /etc/redis/redis.conf
mv /etc/init.d/redis_6379 /etc/init.d/redis
sed -i "s@6379.conf@redis.conf@" /etc/init.d/redis
sed -ine "65s/# bind 127.0.0.1/bind 0.0.0.0/" /etc/redis/redis.conf
sed -ine "393 i\requirepass Bs123456A" /etc/redis/redis.conf

#默認情況下,redis不是在后台運行的,我們需要把開啟的redis后台運行,將daemonize的值改為yes
echo "vm.overcommit_memory=1">>/etc/sysctl.conf
sysctl -p
[root@localhost opt]#


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM