以编程方式执行解压缩命令

时间:2015-12-04 12:10:14

标签: linux scala zip

我创建了一个shell脚本,里面是一个简单的语句var myContainer = new Container(conf => { conf.AddRegistry<RegistryA>(); conf.IncludeRegistry<RegistryB>(); }); ,在运行终端并传递.zip文件作为参数时工作正常并需要unzip -o $1秒来创建解压缩的文件夹。现在我想在scala中做同样的事情,我的代码如下:

5

现在每当我尝试执行ZipExt时,它都会永远停留在object ZipExt extends App { val process = Runtime.getRuntime.exec(Array[String]("/home/administrator/test.sh", "/home/administrator/MyZipFile_0.8.6.3.zip")) process.waitFor println("done") } 并且未达到process.waitFor语句。我已经尝试在本地和服务器上使用此代码。我尝试了其他的可能性,比如在shellcript中创建局部变量,包括在shell脚本中的exit语句,尝试解压缩除了地雷之外的其他print,甚至有时候.zip语句正在执行但是没有在那里创建解压缩文件。所以我很确定以编程方式执行print命令以解压缩文件或者还有其他方法可以解压缩压缩文件。我已经遇到了这个问题2天,所以有人请帮助..

1 个答案:

答案 0 :(得分:1)

您提供给我们的信息似乎不足以重现问题:

% mkdir 34088099
% cd 34088099 
% mkdir junk
% touch junk/a junk/b junk/c
% zip -r junk.zip junk
updating: junk/ (stored 0%)
  adding: junk/a (stored 0%)
  adding: junk/b (stored 0%)
  adding: junk/c (stored 0%)
% rm -r junk
% echo 'unzip -o $1' > test.sh
% chmod +x test.sh
% scala
Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_66).
Type in expressions to have them evaluated.
Type :help for more information.

scala> val process = Runtime.getRuntime.exec(Array[String]("./test.sh", "junk.zip"))
process: Process = java.lang.UNIXProcess@35432107

scala> process.waitFor
res0: Int = 0

scala> :quit
% ls junk 
a  b  c

我建议您在自己的机器上尝试相同的复制。如果它也成功了,那么就开始系统地减少后续案例和失败案例之间的差异,一步一步。这将有助于缩小可能的原因。