【问题标题】:linux shell script in javajava中的linux shell脚本
【发布时间】:2012-05-12 18:22:38
【问题描述】:

我在 linux 中使用下面的 shell 代码,我希望它在 Java 中实现。我想在 JAVA 中调用这个命令

mailq | grep -B1 -i temporarily | grep -iv deferred | \
egrep -i 'jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec' | \
awk -F" " '{print $1}' | awk '{print  substr($0,10,14)}'

mailq 命令显示排队的邮件消息,其中有相应的 Id 和错误。 就像在上面的命令中一样,我正在寻找其中包含暂时禁用消息的消息,并在 **09089 中显示其 id 的上述消息,就像这样检查月份和比打印该 id 的最后 5 个字符

【问题讨论】:

  • 也许你可以解释一下这个命令应该做什么。在 Ubuntu 上,我输入了man mailq 并得到了No manual entry for mailq。我知道我可以用谷歌搜索它,但是让那些想要帮助的人轻松工作可能是个好主意……在这里,您希望人们都熟悉 mailq、awk 和 Java(不是 JAVA,顺便说一句)。我敢肯定有很多这样的人,但他们在读这个问题吗?
  • 感谢 Philho 感谢您指出这一点,非常感谢

标签: java linux shell


【解决方案1】:

如果我理解正确的话,你想和这个 shell 命令做同样的事情,但是在纯 Java 中,而不是通过 Java 运行它。移植的优势之一是可移植性。

我认为您希望JavaMail 进行邮件访问。我不是这个 API 的专家,但我在一个小的 Processing 程序中使用它来展示它的用法:Email sketch

然后你需要过滤掉结果并隔离出你想要的部分,这并不难。

【讨论】:

    【解决方案2】:
      String cmd = "mailq | grep -B1 -i temporarily | grep -iv deferred | "
                  +"egrep -i 'jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec' |" 
                  + " \'{print $1}\' | awk \'{print  substr($0,10,14)}\'";
        try
        {
          ProcessBuilder pb = new ProcessBuilder("bash", "-c", cmd);
          Process p = pb.start();
          p.destroy();
        }
        catch (Exception e)
        {e.printStackTrace();}
    

    【讨论】:

    • 感谢 Bitmap 有没有其他方法可以在 JAVA 中调用上述命令,因为 Linux 中存在 mailq 命令,所以在 JAVA 中是否有与 Linux 中的 mailq 命令等效的命令,以便我可以在 JAVA 中编写此 shell 代码直接
    • 没有用于 mailq Java 的库。
    【解决方案3】:

    一般而言,此类问题在 java 中由“运行时”类处理。 这里Runtime example java 你可以找到一个例子来说明如何做到这一点

    虽然较新的方法是使用 ProcessBuilder 类

    【讨论】:

      【解决方案4】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      相关资源
      最近更新 更多