• shell-whiptail代码如何实现调用新终端并执行命令运行程序


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 d77_52558522 2024-04-19 16:36 采纳率: 33.3% 浏览 0 首页/ 编程语言 / shell-whiptail代码如何实现调用新终端并执行命令运行程序 bashlinuxcentos 如图所示代码,我想实现1选项打开一个新的cmd终端并输入后两条命令,2和3选项打开一个新的cmd终端后运行指定bash脚本但是运行后,123选项均无法打开新终端,且2和3选项运行时出现如下问题 应该如何修改代码 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    3条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-19 16:36
      关注

      引自免费微信小程序:皆我百晓生

      在您的代码中,存在一些错误,这可能是导致问题的原因。首先,让我们解决whiptail菜单中的语法问题,并修复打开新终端执行命令的部分。

      下面是修改后的代码:

      #!/bin/bash 
      
      # 定义菜单选项
      options=("开启snort监测" "更新规则库" "可疑行为统计" "退出")
      selected_option=()
      
      for i in "${!options[@]}"; do
          selected_option+=("$(printf "%2d %s\n" "$i" "${options[$i]}")")
      done
      
      # 使用whiptail显示菜单
      read -p $(printf "%s\n" "${selected_option[@]}" | whiptail --title "欢迎进入!请选择您要执行的操作" --menu "选项" 24 80 1 5) option_index
      
      # 根据选择执行相应操作
      case $option_index in
          1)
              # 打开新的终端并执行命令
              xterm -e "cd /etc/snort && snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i ens33"
              xterm -e "/scripts/demo.sh"
              ;;
          2)
              # 打开新的终端并运行脚本
              xterm -e "/scripts/update_rules.sh"
              ;;
          3)
              # 打开新的终端并运行脚本
              xterm -e "/scripts/count.sh"
              ;;
          4)
              exit 0
              ;;
      esac
      

      这里进行了以下更改:

      1. 更改了数组定义为字符串列表,便于在循环中添加序号。
      2. 使用 for 循环遍历选项列表,将序号和选项值合并到一个列表中(selected_option)。
      3. 将数组元素传递给 whiptail 命令,使其正确显示菜单。
      4. 在 case 语句中,对每个选项使用相应的命令和脚本路径。

      关于图2中提到的问题,警告信息 "Tried to connect to session manager, None of the authentication protocols specified are supported" 表示可能没有正确配置 X11 或缺少相关的库文件。解决这个问题的方法通常包括安装 xauth 和确保 X11 服务器正确设置。

      如果您遇到 "cannot load font" 错误,可能是因为字体缺失或系统配置问题。您可以尝试安装缺失的字体包,例如在 CentOS 系统上,可以运行:

      sudo yum install xorg-x11-fonts-75dpi xorg-x11-fonts-100dpi
      

      或者,在 Debian/Ubuntu 系统上:

      sudo apt-get install fonts-freefont-ttf
      

      如果以上建议仍然无法解决问题,请提供更详细的环境信息,以便进一步分析和提出解决方案。

      展开全部

      评论 编辑记录
    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-19 16:36
      关注

      下午好🌅🌅🌅
      本答案参考ChatGPT-3.5

      问题分析:

      根据提供的Shell脚本代码,你想要实现以下功能:

      1. 选择选项1时,打开新的cmd终端并输入后两条命令。
      2. 选择选项2或3时,打开新的cmd终端并运行指定的bash脚本。

      然而,在运行代码后,无法成功打开新的终端,且选项2和3运行时出现错误消息。

      解决方案:

      1. 打开新终端并输入命令可以使用gnome-terminal命令(如果是在GNOME桌面环境中的话)。你可以尝试修改选项1的代码如下:
      1) gnome-terminal -- bash -c "cd /etc/snort;snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i ens33;exec bash"
      

      这里使用了gnome-terminal命令来打开新的终端,并在新终端中执行cd /etc/snortsnort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i ens33命令,然后执行exec bash来保持终端窗口打开。

      1. 打开新终端并执行bash脚本可以使用类似的方式。你可以尝试修改选项2和3的代码如下:
      2) gnome-terminal -- bash -c "/scripts/demo.sh;exec bash"
      3) gnome-terminal -- bash -c "/scripts/count.sh;exec bash"
      

      这里使用了gnome-terminal命令来打开新的终端,并在新终端中执行/scripts/demo.sh/scripts/count.sh脚本,然后执行exec bash来保持终端窗口打开。

      1. 如果你不是在GNOME桌面环境中,可以尝试使用其他支持在命令行中打开新终端的命令,如xtermkonsole。你需要根据自己的环境和终端选择修改相应的命令。

      以上是针对你的问题提供的解决方案,希望对你有帮助。如果还有其他问题,请及时提出。

      评论
    • GISer Liu 2024-04-19 17:34
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      根据你的描述,你想通过shell脚本使用whiptail来实现以下功能:

      1. 选项1:在新的cmd终端中执行两条命令。
      2. 选项2:在新的cmd终端中执行指定的bash脚本。
      3. 选项3:与选项2类似,在新的cmd终端中执行另一个指定的bash脚本。
        你遇到的问题是无法打开新的终端,并且在运行选项2和选项3时出现了问题。接下来,我会提供一种可能的解决方案,并给出相应的代码。
        首先,我们需要使用start命令来启动新的cmd终端。其次,我们可以通过&&来在新的终端中依次执行多个命令。
        针对选项2和选项3,你需要确保bash脚本的路径是正确的,并且确保脚本文件是可执行的。
        下面是修改后的代码示例:
        bashCopy code
        ```
        #!/bin/bash
        cmd=""
        cmd1="echo '这是命令1'"
        cmd2="echo '这是命令2'"
        script1="/path/to/script1.sh"
        script2="/path/to/script2.sh"
        while [ 1 ]
        do
        cmd=$(whiptail --title "选择一个操作" --menu "请选择一个操作:" 15 60 5
        "1" "选项1"
        "2" "选项2"
        "3" "选项3" 3>&1 1>&2 2>&3)
        if [ $? -eq 0 ]; then
        case $cmd in

      1)
      start cmd /k "$cmd1 && $cmd2"
      ;;
      2)
      start cmd /k "bash $script1"
      ;;
      3)
      start cmd /k "bash $script2"
      ;;
      *)
      whiptail --msgbox "退出" 10 40
      exit 0
      ;;
      esac
      else
      whiptail --msgbox "退出" 10 40
      exit 0
      fi
      done

      这段代码会通过 whiptail 显示一个菜单,让用户选择不同的操作。根据用户的选择,它会在新的cmd终端中执行相应的命令或脚本。使用
      start 命令可以确保在新的终端中执行这些命令和脚本。 请将 /path/to/script1.sh /path/to/script2.sh

      ```替换为实际的脚本路径。确保这些脚本是可执行的,并且有足够的权限来执行它们。
      如果还有其他问题或需要进一步的解释,请随时提出。

      如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

      展开全部

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    【SA8295P 源码分析 (四)】23 - QNX Ethernet MAC 驱动 之 emac1_config.conf 配置文件解析
    Leetcode刷题详解——使用最小花费爬楼梯
    自定义switch实现以下两种方式
    图像分割经典论文调研(1):DilatedNet、DeepLabV2、HDC/DUC
    理解渲染,吃透渲染,你应该知道的Android渲染优化小技巧
    MAML:User Diverse Preference Modeling by Multimodal AttentiveMetric Learning
    Python基础——异常处理
    企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
    Netty 学习之 Socket
    JVM性能调优篇02-JVM内存模型深度剖析与优化
  • 原文地址:https://ask.csdn.net/questions/8091362