我的操作系統是CentOS 6.3。 我有一個bash腳本,它獲取mysql從屬狀態並給用戶菜單一些操作。當一個行動發生時,它會自我刷新。下面是一個簡單的例子:爲什麼在我的bash腳本中grep結果沒有按預期更新?
#!/bin/sh
server_status_detect() {
rm -f /root/slave.status
mysql -u${MYSQL_USER} -p${MYSQL_PASS} -e 'show slave status \G' 2>&1 1>/root/slave.status
#some parsing of the file to see if threads are running and so on, done like this
Slave_IO_Running=$(grep '\sSlave_IO_Running:' /root/slave.status | awk '{ print $2 }');
}
themenu() {
clear
server_status_detect
echo -e "Slave running? "$Slave_IO_Running;
echo "Available actions:"
#print actions
}
while true
do
themenu
read answer
case $answer in
e) menu_network_pick;;
d) menu_mount_pick;;
m) menu_master_pick;;
p) menu_repair_replication_pick;;
t) menu_restart_replication_pick;;
r) menu_reboot_pick;;
s) menu_shutdown_pick;;
*) continue;;
esac
done
一切正常,狀態文件重新創建每次迭代中,它包含了實際數據。但是,腳本顯示拳頭解析的數據!似乎它不會每次迭代都解析文件,它只會在第一次執行時才執行解析,之後只會顯示它記住的結果。這怎麼會發生?
你怎麼調用這個腳本?你能告訴我們這個叫它的線嗎? (聽起來像它可能是源代碼而不是被執行) – nullrevolution
我通過/path/to/script/menu.sh命令從終端執行它。或者它在用戶登錄時自動執行(它位於.bash_profile中)。 –
是'grep'中的'\ s' \ sSlave_IO_Running:''應該表示一個空白字符嗎?如果是,請使用'grep -P'來啓用Perl兼容的正則表達式。 –