【问题标题】:Calling awk script embedded inside a shell script from Java从 Java 调用嵌入在 shell 脚本中的 awk 脚本
【发布时间】:2012-07-23 00:29:10
【问题描述】:

我正在开发一个 Web 应用程序,其中我使用 shell 脚本作为我的后端(它有一个嵌入式 awk 脚本)和 Java 作为我的前端。我正在使用 Process Builder 来调用 shell 脚本程序。奇怪的是,我的 shell 脚本中的 awk 脚本没有被执行。我在哪里出错了...您能否分享您对此的看法。

在下面的评论中键入的 shell 脚本。

#!/bin/bash
FileA=$1
FileB=$2
awk -v FileA="$FileA" '{print $0 >> FileA;}' "$FileB"

【问题讨论】:

  • 提供更多信息、源代码、示例、错误。是否成功调用了 shell 脚本?如果您从命令行运行 shell 脚本,它可以工作吗?
  • 是的,当我运行 shell 脚本时,它确实可以工作。如果我从 Java 调用 shell 脚本,我不会收到任何错误。当我调用 awk 脚本时,没有执行所需的功能通过Java
  • 在您的 shell 脚本中,添加如下行:exec >/tmp/out 2>&1; set -x 这会将所有输出填充到文件 /tmp/out 中,然后在运行时显示每个命令。通过 shell 运行以测试它是否有效,然后 rm /tmp/out 并通过 Java 运行。
  • #!/bin/bash FileA=$1 FileB=$2 awk -v FileA="$FileA" '{print $0 >> FileA;}' "FileB".. 这是一个简单的程序我正在使用,但没有得到预期的结果,也没有错误

标签: java shell awk processbuilder


【解决方案1】:

尝试在 cmets 中相互键入程序是愚蠢的。我已经编辑了您的问题,以包括我破译您的 shell 脚本的内容。我创建了这个答案来记录我要求您将程序修改为的内容。请提供 /tmp/out 中看到的输出(在您的问题中),以便从 shell 和 java 程序执行此脚本。

顺便说一句,您是以自己的用户身份运行 java 程序,还是当您尝试附加到文件时,java 程序可能由不同的用户 id 执行,从而导致权限问题。

#!/bin/bash
rm -f /tmp/out
exec >/tmp/out 2>&1
date
set -x
printenv
which awk
FileA="$1"
FileB="$2"
ls -l "$FileA"
id
awk -v FileA="$FileA" '{print $0 >> FileA;}' "$FileB"

确保在更新问题后向我发表评论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2013-05-10
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多