开发者社区> 问答> 正文

java 在linux中执行命时,远程文件地址问题

screenshot代码在eclipse和Windows控制台上跑都可以成功完成,但是在linux上面总是出问题,
将生成的命令复制到linux单独执行,却可以执行成功,
最后进过半天的调试,发现是filepath 两边的_ 双引号 _的问题,
除去双引号,程序可以正常执行了,有木有大神能说说原因啊,
----------------linux小白

展开
收起
杨冬芳 2016-07-11 18:30:33 2766 0
1 条回答
写回答
取消 提交回答
  • IT从业

    nswcfd 2015.05.29 19:48
    已采纳
    命令参数含有引号,作为字符串本身传递给java又要加引号,需要考虑引号的逃逸。

    或者从上到下说

    1. Java exec本身的参数是一个字符串;
    2. 由于这个串本身不是命令,而是命令和参数的混合体,肯定通过bash -c "cmd"的形式传递给bash,这里又是一层引号;
      3.命令的某个参数(文件名)可能含有空格,所以从bash的角度,需要用引号把参数保护起来。

    把引号去掉变ok,这是碰巧:如果文件名里含有空格(如果允许的话),那一样会报错。可以验证一下。
    原始命令的"应该是出于这个目的才存在的。

    最简单的作法,由于bash既接受单引号也接受双引号来包含参数,把双引号换成单引号就可以了,这样就不需要"来保护了。
    当然其缺陷是filepath中不能包含单引号。

    复杂点的作法,把"替换为\",增加一层逃逸(注意两边都要有)。但它同样有filepath不能有双引号的问题。

    2019-07-17 19:54:35
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载