私のOSはCentOS 6.3です。mysql スレーブのステータスを取得し、ユーザー メニューにいくつかのアクションを与える bash スクリプトがあります。アクションが行われると、それ自体が更新されます。簡単な例を次に示します。
#!/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
すべてが期待どおりに機能し、ステータスファイルは反復ごとに再作成され、実際のデータが含まれています。しかし、スクリプトは最初に解析されたデータを表示します! 反復ごとにファイルを解析するわけではないようです。最初にのみ実行し、その後は記憶した結果を表示するだけです。どうしてそれが起こり得ますか?