在 exec() 中处理 \n 和 \t - Java

Handling \n and \t in exec() - Java

我正在尝试使用 java:

在 linux 中执行如下所示的 bcp 命令
bcp  dbname..mytable in /home/guest/test -U guest -P guest -S LXXDB1D06 -I /opt/sybase/08/interfaces -c -Y -t \| -r \n   

在JavaClass中,我这样做:

Runtime rt = Runtime.getRuntime();
Process p;
try {
        p = rt.exec("bcp  dbname..mytable in /home/guest/test -U guest -P guest -S LXXDB1D06 -I /opt/sybase/08/interfaces -c -Y -t \| -r \n");
p.waitFor();
} catch(..){

..}

我尝试了 \|、"\"+"\n" 和其他几个。 但是没有用。 正确的格式应该是什么?

编辑:使用 ProcessBuilder,它看起来像:

[bcp, pfactdbcpusdev01..gb_inactive_upc, in, C:\hs_data_dev_00\itm_mstr\tmp\usaupcinact_tmp_rollup, -U, inactupcUSD1, -P, inac01, -S, ACNLNXQ002D01, -I, C:\Program Files\Nielsen\Sybase.5.1/interfaces, -c, -t, |, -r, \n, -Y]

这是一个超级经典的问题,坦率地说,我很惊讶你没有通过谷歌搜索找到解决方案...

解决方案是使用 ProcessBuilder:

final ProcessBuilder pb = new ProcessBuilder("bcp", "dbname..mytable",
    "in", "/home/guest/test",
    "-U", "guest", 
    "-P", "guest",
    "-S", "LXXDB1DO6",
    "-I", "/opt/sybase/08/interfaces",
    "-c",
    "-Y",
    "-t", "|",
    "-r", "\n"
);
final Process p = pb.start();

此外,您应该检查 .waitFor() 的结果。

同时查看 execve(2)execl(2) 和朋友的联机帮助页。