我需要使用Runtime.getRuntime()。exec()执行这样的Linux命令:
/opt/ie/bin/targets --a '10.1.1.219 10.1.1.36 10.1.1.37'
基本上,这个命令是将每个目标逐个连接到服务器(10.1.1.219,10.1.1.36,10.1.1.37)。它在终端中运行良好,结果应该是:
['10.1.1.219', '10.1.1.36', '10.1.1.37']
但是如果我使用Runtime.getRuntime()。exec(execute)执行命令,就像这样:
execute = "/opt/ie/bin/targets" + " " + "--a" + " " + "'" + sb
+ "'";
Java会将单引号视为要执行的字符串,结果将为:
callProcessWithInput executeThis=/opt/ie/bin/targets --a '10.1.1.219 10.1.1.36 10.1.1.37'
The output for removing undesired targets :["'10.1.1.219"]
任何人都知道如何解决它?谢谢!
答案 0 :(得分:5)
引用字符由shell解释,以控制它如何将命令行拆分为参数列表。但是当你从Java调用exec
时,你没有使用shell;你直接调用程序。当您将单个String
传递给exec
时,会使用StringTokenizer
将其拆分为命令参数,这只会在空格上拆分,并且不会对引号赋予任何特殊含义。
如果您想要更多地控制传递给程序的参数,请调用带有exec
参数的String[]
版本之一。这会跳过StringTokenizer
步骤,并允许您指定被调用程序应接收的确切参数列表。例如:
String[] cmdarray = { "/opt/ie/bin/targets", "--a", "10.1.1.219 10.1.1.36 10.1.1.37" };
Runtime.getRuntime().exec(cmdarray);