如果包含特殊符号,Linux 命令无法使用 java

Posted

技术标签:

【中文标题】如果包含特殊符号,Linux 命令无法使用 java【英文标题】:Linux Command not working using java if it contains special symbol 【发布时间】:2019-12-10 13:04:09 【问题描述】:

我正在尝试运行下面的代码,但它不起作用,有人可以帮助我理解为什么它会这样或者我错过了什么吗?

import java.io.IOException;

public class SimpleClass 

    public static void main(String args[])
        try 
            Process process = Runtime.getRuntime().exec("bash mkdir demoDir");
            // Process process2 = Runtime.getRuntime().exec("echo sometext >> someFile.txt");
            

        catch (IOException e) 
            e.printStackTrace();
        
    


如果我执行第一个进程,它工作正常,但如果我执行 process2,它不工作。 someFile.txt 存在并且当前的工作目录,除了这个命令,如果我尝试制作像mkdir /home/dummy/demoDir 这样的目录,那么它也不起作用,但我的程序成功执行。

【问题讨论】:

你认为bash在第一种方法中的作用是什么? 【参考方案1】:

here 已经讨论过这个问题的答案。使用

String[] cmd = "bash", "-c", "echo sometext >> someFile.txt" ;
Process process2 = Runtime.getRuntime().exec(cmd);

相反。对我有用。

【讨论】:

Thanx Brosch,它起作用了 :) 并且该链接也很有用,我之前搜索过它,但谷歌和 *** 都没有告诉我答案:(【参考方案2】:

>> 由您的 shell(例如 bash、zsh 等)解释和处理。但是,您没有在此命令中运行 shell。 Runtime.exec() 基本上执行命令/bin/echo 并将参数someText>>someFile.txt 传递给它。

我不知道你为什么要做你正在做的事情,但试试这个:

Runtime.getRuntime().exec("bash -c \"echo sometext >> someFile.txt\"");

【讨论】:

嗨,马修,谢谢你的答案,但我之前尝试过,但没有成功,我再次尝试了你的答案,但仍然没有成功【参考方案3】:

你不能在没有 shell 的情况下执行 echo 命令 -> 将 bash 添加到开头

【讨论】:

以上是关于如果包含特殊符号,Linux 命令无法使用 java的主要内容,如果未能解决你的问题,请参考以下文章

Linux Shell 几个特殊符号命令 & && ||

Linux -shell特殊符号

Linux中的特殊符号及含义

Linux chmod命令详解

Linux基本命令-chmod

DOS 命令中怎样将一个特殊字符设置成普通符号