此问题已在此处有答案:
Why does my tool output overwrite itself and how do I fix it?(3个答案)
13天前关闭。
我创建了一个bash脚本来读取另一个命令(java -jar ...
)的输出。
命令的结果如下所示:
MIN,MAX
6165350,6228865
我使用head -2 | tail -1
省略了第一行,因此输出将变为
6165350,6228865
我把它保存到变量output
中
output=$(java -jar bundletool.jar get-size total --apks=$APKS_PATH | head -2 | tail -1)
最后,我创建java文件来分割输出结果
import java.util.*;
public class Demo {
public static void main(String[] args) {
String[] values = args[0].split(",");
System.out.println(Integer.parseInt(values[0]));
System.out.println(Integer.parseInt(values[1]));
}
}
下面是最后的bash脚本
#!bin/bash
output=$(java -jar bundletool.jar get-size total --apks=$APKS_PATH | head -2 | tail -1)
java Demo $output
当我运行bash时,为什么我会得到错误
6165350
"xception in thread "main" java.lang.NumberFormatException: For input string: "6228865
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at Demo.main(Demo.java:8)
当我尝试更改output
时,得到了正确的结果。
output="6165350,6228865"
谢谢你
3条答案
按热度按时间2izufjch1#
我怀疑在最后一个参数的末尾有一个
\r
,这解释了为什么Exception
被拼写为"xception
。您可以通过将输出通过管道传输到十六进制转储来确认这一点。
您可以在bash部分中使用
tr -d '\r'
修剪\r
,或者在Java部分中删除参数。vddsk6oq2#
如果有一个 non-printing character,通常 String#strip 方法会删除它。
试试下面的方法。
baubqpgj3#
既然您提到
bundletool.jar
生成一个回车作为行尾,我将(如果您不能更改Java程序以生成合理的行尾)简单地执行一个然后,第一个数字为
${nums[0]}
,第二个数字为${nums[1]}