繁体   English   中英

当我按 ctrl-c 停止时,在菜单系统中使用 Netstat -anlp 会破坏我的菜单 output

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM