Tag: bash

如何在使用bash脚本初始化的java应用程序中捕获SIGNAL

我使用以下代码在java中捕获INT信号: Signal.handle(new Signal(“INT”), new SignalHandler () { public void handle(Signal sig) { log.warn(“Received SIGINT signal. Will teardown.”); task.tearDown(); // Force exit anyway System.exit(1); } }); 当我使用java -jar file.jar启动我的应用程序时,我可以捕获与kill -INT PID一起发送的信号。 如果我调用java -jar file.jar & (jvm在后台运行),我无法捕获使用kill -INT发送的信号。 有任何想法吗? 谢谢。

AES使用openssl命令行工具加密,并在Java中解密

我有一个使用openssl工具加密的bash脚本。 #!/bin/bash key128=”1234567890123456″ iv=”1234567890123456″ openssl enc -aes-128-cbc -in test -out test.enc -K $key128 -iv $iv 以及尝试解密脚本生成的文件的Java代码。 public class crypto { public static void main( String[] args ) { try { File f = new File(“test.enc”); Cipher c; Key k; String secretString = “01020304050607080900010203040506”; String ivString = “01020304050607080900010203040506”; byte[] secret = hexStringToByteArray(secretString); byte[] iv = hexStringToByteArray(ivString); […]

从Java通过SSH执行Bash命令时出现问题

我无法通过SSH从Java在远程GNU / Linux系统上执行命令。 在本地Bash中执行时,以下命令可以正常工作(当然用户和主机不同但行为不变)。 $ ssh user@host.example.com ‘hostname’ host $ ssh user@host.example.com ‘hostname -f’ host.example.com $ ssh user@host.example.com “hostname -f” host.example.com 在没有参数的情况下,执行我认为与Java相同的任何事情都会失败。 import java.io.ByteArrayOutputStream; import java.io.IOException; import org.apache.commons.exec.CommandLine; import org.apache.commons.exec.DefaultExecutor; import org.apache.commons.exec.Executor; import org.apache.commons.exec.PumpStreamHandler; public class SOPlayground { public static void main(String[] args) throws Exception { for (String argument : new String[]{“hostname”, “‘hostname'”, “\”hostname\””, “‘hostname […]

重定向应用程序(java)的输入,但仍允许在BASH中使用stdin

我有点困惑,我昨天有这个工作,但它刚刚停止接受重定向的标准输入,几乎是神奇的。 set -m mkfifo inputfifo mkfifo inputfifo_helper ((while true; do cat inputfifo; done) > inputfifo_helper)& trap “rm -f inputfifo inputfifo_helper java.pid; kill $!” EXIT exec 3<&0 (cat inputfifo)& NOW=$(date +”%b-%d-%y-%T”) if ! [ -d “logs” ]; then mkdir logs fi if [ -f “server.log” ]; then mv server.log logs/server-$NOW.log fi java java.pid && fg 运行正常,我可以回复inputfifo并且应用程序得到它,我也可以直接输入它的控制台。 […]

从Java执行Shell脚本,Shell脚本具有读取操作

我有一个Shell Scripts来读取输入 #!/bin/bash echo “Type the year that you want to check (4 digits), followed by [ENTER]:” read year echo $year 我正在使用JAVA APi执行这个shell脚本 ProcessBuilder pb = new ProcessBuilder(“/bin/bash”, “/junk/leaptest.sh”); final Process process = pb.start(); InputStream is = process.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; while ((line = br.readLine()) != […]

当环境变量存在时,System.getenv()返回null

我正在尝试System.getenv()来获取我通过终端(Mac)设置的环境变量的值,我还在我的.bash_profile文件中设置变量并重新加载。 在这样做之后,我回显了值并且正确的值被打印到终端。 尝试检索变量的值时(我确保在我的.bash_profile文件和使用System.getenv()时使用了正确的名称。 在下面的代码中,我用VAR_NAME替换了变量的名称: String varValue = System.getenv(“VAR_NAME”); System.out.println(“Value: ” + varValue); 在我的.bash_profile中: export VAR_NAME=”foo” 当我打印出varValue的值时,会打印“null”。 可能是什么原因造成的? 编辑:我在这里按照最新的答案,重新启动Eclipse,它工作正常!

如何使用bash将输入传递给Java程序

我的Java程序正在监听标准输入: InputStreamReader isReader = new InputStreamReader(System.in); BufferedReader bufReader = new BufferedReader(isReader); while(true){ try { String inputStr = null; if((inputStr=bufReader.readLine()) != null) { … } else { System.out.println(“inputStr is null”); } } catch (Exception e) { … } } 现在,我想从bash管道输入到这个程序。 我尝试了以下方法: echo “hi” | java -classpath ../src test.TestProgram 但它只是打印inputStr is null无限次inputStr is null 。 我究竟做错了什么? 编辑1:更新了问题以包含更多代码/上下文。 […]

Android在app中运行bash命令

嗨,我正在开发一个应用程序,它要求我运行一些bash代码是否有一种方法,我可以硬编码脚本到我的应用程序,然后运行它? 例如(这是一个非常简化的例子) #!/system/bin/sh # if [ ! -f /sdcard/hello.txt ] then echo ‘Hello World’ >> /sdcard/hello.txt else echo ‘Goodbye World’ >> /sdcard/goodbye.txt fi 我有以下方法来运行一行bash命令,但需要运行类似于多行的东西。 再说上面的代码是一个非常简单的例子,我实际上在做什么必须通过脚本运行,不能通过java完成。 我也想让它硬编码我知道可以将脚本存储在手机上并使用以下内容运行它但不希望脚本只是在那里它宁愿它在应用程序中硬编码。 public Boolean execCommand(String command) { try { Runtime rt = Runtime.getRuntime(); Process process = rt.exec(“su”); DataOutputStream os = new DataOutputStream(process.getOutputStream()); os.writeBytes(command + “\n”); os.flush(); os.writeBytes(“exit\n”); os.flush(); process.waitFor(); } catch […]

通过shell脚本传递空格分隔的系统属性不起作用

我有这个bash文件: #/bin/bash PROP=”-Dprop=foo bar” java $PROP -jar Foo.jar 所以,我想在这里做的是将空格分隔的列表作为系统属性传递。 但这不知何故不起作用: Caused by: java.lang.ClassNotFoundException: bar 所以,似乎Bash打破了-Dprop=foo bar up -Dprop=foo , bar 。 我尝试了从双引号到逃避空间角色的一切,但似乎没有任何效果。

从外部目录运行Shell脚本:没有这样的文件或目录

我有一个shell脚本文件,我想从java运行。 我的java工作空间目录与脚本的目录不同。 private final String scriptPath = “/home/kemallin/Desktop/”; public void cleanCSVScript() { String script = “clean.sh”; try { Process awk = new ProcessBuilder(scriptPath + script).start(); awk.waitFor(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } 我得到这个错误: java.io.IOException: Cannot run program “cat /home/kemallin/Desktop/capture-03.csv | awk -F […]