【问题标题】:Deb fails to install if space is in file name如果文件名中有空格,则 Deb 安装失败
【发布时间】:2015-06-03 21:28:21
【问题描述】:

所以在我的应用程序中,我有一个表格视图。如果文件是 deb,它会要求安装,按安装,然后它会将我带到一个显示安装的视图控制器,类似于 iFile 和 Cydia(输出没有那么迷人,哈哈)。

在这方面一切都很好。它安装。然而。如果文件名称中有空格,即random File.deb,则会失败。我注意到 iFile 已经弄清楚了,尝试联系他们,看看他们是否可以就情况告诉我,但还没有回复。

我该如何逃离这个空间?或者让它看起来像 dpkg 不在乎它的存在?

这就是我调用和执行安装的方式。

MyDownloadsViewController * vc = [[MyDownloadsViewController alloc] init];
vc.fileName = debName;

// Get documents folder
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
path = [paths objectAtIndex:0];
path = [[@"~/Documents/myFolder" stringByExpandingTildeInPath] retain];

NSString *debPath = [path stringByAppendingPathComponent:vc.fileName];

//NSTask    
NSTask *task = [[NSTask alloc] init];
NSPipe *pipe = [NSPipe pipe];
[task setLaunchPath: myLaunchPath];
[task setArguments: [NSArray arrayWithObjects:@"/usr/bin/dpkg", @"-i", debPath, @"2>/tmp/dpkg.log" ,nil]];
[task setStandardOutput: pipe];
[task launch];

我尝试过使用:

[filename stringByReplacingOccurrencesOfString:@" " withString:@""]

在下载中发送文件和在输出视图控制器中接收文件。它要么失败,要么应用崩溃。

我也试过了:

if ( [fileName rangeOfString:@" "].location != NSNotFound ) {
    appendedFile = [path stringByReplacingOccurrencesOfString:@" " withString:@""];        
}

判断文件是否有空格,如果没有则正常进行。这会以同样的方式产生一些不需要的结果,而且它会安装表格视图中最后一个 deb 的内容。

使用 2 个 NSTask 会更好吗? 1解压,2配置?我试过了,但它不会进入第二个任务,或者它仍然会看到第一个正在运行并锁定 dpkg。

任何见解或知识将不胜感激。

【问题讨论】:

  • 你不能使用2>/tmp/dpkg.log作为NSTask的参数,因为这个参数应该被shell解释,而不是dpkg。 NSTask 不会自动解释类似 shell 的语法,如 |>!
  • dpkg.log 是我的表视图打开时创建的日志文件。一旦一个 deb 被点击安装,它就会读取打印到该日志文件的输出。这可能不是一种“正确”的方式,但它适用于我正在做的事情。

标签: ios debian jailbreak dpkg


【解决方案1】:

您正在执行一个命令行应用程序,因此您必须像在 shell 提示符下自己键入一样执行。

这会安装一个从名为foo 的文件命名的包,并将一些额外的奇怪/未知参数bar.deb 传递给dpkg

/usr/bin/dpkg -i foo bar.deb

这会从名为 'foo bar.deb' 的文件中安装一个包

/usr/bin/dpkg -i "foo bar.deb"

注意引号...您也可以使用\ 来转义空格,但是您必须意识到您必须进行双重转义:一次用于您的 obj-C,一次用于外壳。

【讨论】:

  • 如果空间可能位于文件名中的随机位置,我将如何转义该空间?
猜你喜欢
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
相关资源
最近更新 更多