从Java程序使用attr linux命令
问题描述:
我想将元数据附加到Unix文件系统中的文件。 attr命令让我这样做,但 命令语法要求附加变量的路径为双重qoutes。从Java程序使用attr linux命令
attr -s outpipe0 "/mnt/FUse/FileB" FileA
如何使用System.Runtime.exec在Java中运行上面的命令。当我尝试使用字符串数组参数运行时,我必须给出上述“/ mnt/FUse/FileB”,它在java程序中导致问题,因为它将双引号视为java中字符串的结尾。我基本上想发送一个字符串参数,它本身有双引号。
有人可以提出解决办法。
感谢
答
您可以在Java中的文本字符串内逃脱引号,像这样:
"\"/mnt/FUse/FileB\""
,将解决你的如何将字符串中的双引号的问题,但我对此表示怀疑将解决你的程序。这是因为我怀疑attr
程序实际上需要(或接受)双引号。相反,壳吃它们。例如,如果您在shell中键入的命令是您提到的那个命令,那么在将参数传递到attr
之前,双引号将被shell使用。所以我怀疑你是否需要双引号(但是如果你这样做,请参见上文)。
微不足道的解决方法:编写一个Un * x外壳脚本,负责正确调用* attr *命令并从Java调用该脚本(而不是直接调用* attr *)。我还强烈建议将任何shell脚本输出重定向到*/dev/null *或临时文件,而不是尝试解析Java中的所有输出。我还建议从外部shell进程中分叉,然后* kill -9 *由Java创建的shell进程。不要让Java **有任何**机会来与您的shell进程“发挥智能”。哦,总是从派生的Java线程中调用外部进程。 – SyntaxT3rr0r 2011-06-05 22:31:24
也从来没有*使用任何其他的* Runtime.exec *方法调用采取* String [] *。永远不要希望使用常规的String方法调用,并让Java正确地分割你的字符串。在执行外部过程之前自行分解您的论点。 – SyntaxT3rr0r 2011-06-05 22:35:56