如何使bash包装器脚本执行接受stdin并输出到stdout的javajar
我制作了一个java程序,它从stdin获取输入并将输出返回到stdout,stdout通过以下方式运行良好:如何使bash包装器脚本执行接受stdin并输出到stdout的javajar,java,bash,io-redirection,Java,Bash,Io Redirection,我制作了一个java程序,它从stdin获取输入并将输出返回到stdout,stdout通过以下方式运行良好: cat inputfile | java -jar whatever.jar <args> ,将执行完全相同的功能 如何制作一个包装器脚本,将stdin不受干扰地传递到jar,同时将stdout接收回echo到CLI 我想我可以通过单向方式将输入文件发送到命令,但不知道如何同时从命令返回输出。这应该可以完成以下工作: #!/bin/bash java -jar whate
cat inputfile | java -jar whatever.jar <args>
,将执行完全相同的功能
如何制作一个包装器脚本,将stdin不受干扰地传递到jar,同时将stdout接收回echo到CLI
我想我可以通过单向方式将输入文件发送到命令,但不知道如何同时从命令返回输出。这应该可以完成以下工作:
#!/bin/bash
java -jar whatever.jar <args>
这应该可以做到:
#!/bin/bash
java -jar whatever.jar <args>
我认为bash脚本应该只包含java调用 然后将文件重定向为脚本的输入:
./script < inputfile
我认为bash脚本应该只包含java调用 然后将文件重定向为脚本的输入:
./script < inputfile
解决方案:
讨论:
与所有Unix shell一样,Bash有一个名为$@的特殊变量。它包含shell脚本的参数列表。我会用它来接收whatever.jar的文件
这样,Bash甚至从未接触过whatever.jar的stdin和stdout。它只需要java调用whatever.jar,通过$@传递给它,然后就不碍事了。所有从stdin读取和写入stdout的操作都由whatever.jar直接完成。解决方案:
讨论:
与所有Unix shell一样,Bash有一个名为$@的特殊变量。它包含shell脚本的参数列表。我会用它来接收whatever.jar的文件
这样,Bash甚至从未接触过whatever.jar的stdin和stdout。它只需要java调用whatever.jar,通过$@传递给它,然后就不碍事了。所有从stdin读取和写入stdout的操作都直接由whatever.jar完成。您应该双引号引用$@即使用$@以避免弄乱包含空格或其他有趣字符的参数。此外,这将是一个使用exec命令的好地方,即exec java-jar whatever.jar$@,它可以防止shell脚本挂起等待java程序完成-使用exec,shell脚本将立即有效退出,并交给java程序处理。感谢您的建议,Gordon!你说得对。我相应地编辑了这篇文章。你应该双引号引用$@即使用$@以避免弄乱包含空格或其他有趣字符的参数。此外,这将是一个使用exec命令的好地方,即exec java-jar whatever.jar$@,它可以防止shell脚本挂起等待java程序完成-使用exec,shell脚本将立即有效退出,并交给java程序处理。感谢您的建议,Gordon!你说得对。我相应地编辑了这篇文章。顺便说一句,cat inputfile |通常被称为cat的无用用法;使用输入重定向有时更简单,有时更好,比如当您尝试在脚本中放入java-jar whatever.jar时会遇到什么问题?我想是出了什么问题导致了这个问题。当你自己尝试时出现了什么问题,没有做任何特别的事情来尝试通过stdin和stdout,因为实际上,你不需要为此做任何特别的事情。现在,问题描述了你正在尝试做什么,但没有描述你在尝试时遇到的具体问题,它也不能让其他人自己看到这个问题,或者测试它是否已成功解决。顺便说一句,cat inputfile |通常被称为cat的无用用法;使用输入重定向有时更简单,有时更好,比如当您尝试在脚本中放入java-jar whatever.jar时会遇到什么问题?我想是出了什么问题导致了这个问题。当你自己尝试时出现了什么问题,没有做任何特别的事情来尝试通过stdin和stdout,因为实际上,你不需要为此做任何特别的事情。现在,问题描述了你正在尝试做什么,但没有描述你在尝试时遇到的具体问题,它也没有提供一个让其他人自己看到问题或测试问题是否已成功解决的方法。