[英]Using Netstat -anlp within a menu system breaks my menu when I ctrl-c to stop output
我有几台机器,我通过各种方式监控,跟踪 apache2 的 access_log,运行 tcpdump,还使用 .netstat。 我决定将所有这些命令设置在一个菜单系统中,以使其他用户更容易使用,到目前为止效果很好。 直到我到达.netstat。 命令如:
tcpdump-vho1mc1()
{
echo "Starting TCP Dump on VHO1MC1 Primary"
ssh vho1mc1-primary sudo /usr/sbin/tcpdump -i vlan654 port 50000 -vvnn -s0 -c50
}
和
apache2tail-vho1uc1()
{
echo "Tailing access log on VHO1UC1"
ssh vho1uc1-primary sudo tail -f /var/log/apache2/access_log
}
当我按 Ctrl-c 并跳回菜单时,这些中断就好了,但是当我使用 .netstat 时:
netstat-vho1uc1()
{
while true;
do
export var10=$(ssh vho1uc1-primary sudo netstat -anlp | grep ":80")
sleep 3
echo $var10
done
}
它会破坏菜单并返回到命令行,迫使用户重新启动菜单脚本。 我上面粘贴的只是我尝试过的几个迭代的 1 次迭代,但没有一个会中断并且 go 返回菜单。 该命令本身工作正常,问题是在我完成后才中断。
菜单系统如下:
######################
#Selection parameters#
######################
case $selection in
1 ) clear ; ucnmls ; press_enter ;;
2 ) clear ; mcnmls ; press_enter ;;
3 ) clear ; uptime ; press_enter ;;
4 ) clear ; dss ; press_enter ;;
5 ) clear ; chkallsvcs ; press_enter ;;
6 ) clear ; network_menu_1 ; press_enter ;;
7 ) clear ; network_menu_2 ; press_enter ;;
8 ) clear ; network_menu_3 ; press_enter ;;
0 ) clear ; exit ;;
* ) clear ; incorrect_selection ; press_enter ;;
esac
done
network_menu_3() {
local PS3='Please enter Selection: '
local options=("VHO1UC1" "VHO2UC1" "VHO3UC1" "VHO1UC2" "VHO2UC2" "VHO3UC2" "Sub Menu
Quit")
local opt
select opt in "${options[@]}"
do
case $opt in
"VHO1UC1")
netstat-vho1uc1
;;
"VHO2UC1")
netstat-vho2uc1
;;
"VHO3UC1")
apache2tail-vho3uc1
;;
"VHO1UC2")
apache2tail-vho1uc2
;;
"VHO2UC2")
apache2tail-vho2uc2
;;
"VHO3UC2")
apache2tail-vho3uc2
;;
"Sub Menu Quit")
return
;;
*) echo "invalid option $REPLY";;
esac
done
}
目前仅使用选项 1 和 2。
我尝试使用中断、陷阱和其他一些东西,但它仍然不会 go 返回子菜单。 我最后做的是写它,这样我就可以按任意键让它停止。 一旦我将菜单 function .network_menu_3) 放在最后,这实际上就起作用了。 这是我用来执行此操作的代码。 虽然我没有想出它。 它是在我现在找不到的网站上找到的。 无论如何,这是代码。
netstat-vho3uc2() {
if [ -t 0 ]; then
SAVED_STTY="`stty --save`"
stty -echo -icanon -icrnl time 0 min 0
fi
echo "Logging into HOSTNAME (x.x.x.x)"
echo "Running Netstat..."
echo "Press any key to go back to the menu"
count=0
keypress=''
while [ "x$keypress" = "x" ]; do
ssh HOSTNAME sudo netstat -anlp | grep ":80"|wc -l
sleep 3
# echo -ne $count'\r'
keypress="`cat -v`"
done
if [ -t 0 ]; then stty "$SAVED_STTY"; fi
network_menu_3
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.