Bash输入和输出重定向

贾斯汀·胡萝卜

我有一个Java程序,该程序正在Mac OS X上使用Bash脚本运行。我有两个文件-允许我将命令传递到程序中的FIFO和输出日志文件。

Bash脚本由以下代码组成:

#!/bin/bash
java -jar file.jar <./run/command-fifo >>./run/server.log 2>&1 &
echo $! >| ./run/server.pid

老实说,我不记得为什么>|在第三行中使用过(我只知道它有效)。在Java行中,第一个<将fifo文件重定向到标准输入。>>应标准输出重定向到文件,并2>&1应标准错误重定向到它。然后,它在后台运行。

问题是什么都没有写入到server.log文件中。读取了命令fifo文件,但未写入日志。该程序正在写入标准输出(如果我自己运行它,则可以正常运行)。

我也script按照这个问题的建议进行了尝试但是它也不起作用:

script -q /dev/null java -Xmx4G -Xms4G -jar current.jar --nogui <./run/command-fifo >>./run/server.log 2>&1 &

任何人都有想法将此正确写入日志吗?

后续行动:为了使这种解释有意义,我应该对软件的工作方式进行更多说明。这里分为三个部分:

  1. 一个plist,launchd用于在启动时通过调用启动脚本来启动程序
  2. 启动脚本,用于处理终止信号并等待Java进程的pid
  3. 启动脚本调用的启动脚本,用于启动程序并保存其pid。

上面给出的脚本是开始脚本。这将启动java进程,将其pid回显到文件,然后返回。然后,启动器脚本(此处未给出)在终止之前等待pid退出。如果终止,则launchd会自动重新启动启动器脚本。

“启动”具有可以为其启动的文件设置标准输出路径的功能。本质上,它将启动程序脚本的标准输出重定向到给定文件。

我这样做了,瞧,它成功了。通过将启动脚本行更改为以下内容:

java -jar file.jar <>./run/command-fifo &

它允许通过启动捕获标准输出并将其写入文件。这是一个不同的解决方案,但实际上确实可以。奇怪的是,由于Java进程处于后台,因此启动器脚本在技术上没有任何输出,但是无论如何,它实际上都可以工作。

当然,我更愿意将文件的标准输出显式重定向到文件中(在其他脚本中,可能存在不止一个的情况,因此我需要将它们分开)。我仍将继续尝试并尝试找到解决方案。

数字创伤

我认为@torek关于缓冲的评论可能是对的。您可以java使用stdbuf实用程序强制您的进程对输出进行行缓冲

#!/bin/bash
stdbuf -oL java -jar file.jar <./run/command-fifo >>./run/server.log 2>&1 &
echo $! >| ./run/server.pid

关于>|运算符,@ torek也是正确的。这是bash手册条目

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

输入和输出重定向

来自分类Dev

在 bash 脚本中重定向标准输入和标准输出

来自分类Dev

bash中的输入输出重定向

来自分类Dev

重定向标准输入和标准输出

来自分类Dev

重定向shell中的输入和输出

来自分类Dev

重定向标准输入和标准输出?

来自分类Dev

重定向标准输出和标准输入-Java

来自分类Dev

C ++-使用io重定向输入和输出多个整数

来自分类Dev

在外壳中重定向输入和输出的代码

来自分类Dev

具有重定向的输入和输出的MadLib C程序

来自分类Dev

C ++-使用io重定向输入和输出多个整数

来自分类Dev

bash的输出重定向->>和>&,重定向和复制之间有什么区别?

来自分类Dev

Bash:将命令输出重定向到STDOUT和变量

来自分类Dev

bash:与重定向输出混淆

来自分类Dev

bash:与重定向输出混淆

来自分类Dev

扩展bash函数以添加输入重定向和/或管道

来自分类Dev

使用bash重定向和输入变量编写脚本

来自分类Dev

输出重定向和空格

来自分类Dev

当所有输入和输出都重定向后,ssh如何提示输入密码?

来自分类Dev

输入重定向时额外输出

来自分类Dev

bash:“<”和“<<<”重定向的区别

来自分类Dev

1和2在命令行输入/输出重定向中是什么意思?

来自分类Dev

如何像在命令行上一样使用PyCharm重定向输入和输出?

来自分类Dev

1和2在命令行输入/输出重定向中是什么意思?

来自分类Dev

组合输入和输出外壳IO重定向(以非标准顺序)

来自分类Dev

从 Java 调用具有输入和输出重定向的 C 可执行文件

来自分类Dev

Bash语法映射文件输入重定向

来自分类Dev

PowerShell标准输出和重定向

来自分类Dev

结合括号扩展和输出重定向

Related 相关文章

热门标签

归档