OS X 命令行应用程序在从 Java 调用时找不到目录
OS X command line application cannot find directory while called from Java
如果我在终端中 运行 它工作正常:
lsof -F n +D /some/directory
但是当我 运行 来自 Java 的相同内容时,它不会:
Process lsof = new ProcessBuilder("lsof", "-F", "n", "+D", "'/some/directory'").start();
lsof.waitFor();
if (lsof.exitValue() != 0) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(lsof.getErrorStream()));
String line = null;
StringBuffer sb = new StringBuffer();
while ((line = reader.readLine()) != null) {
sb.append(line);
sb.append("\n");
}
log.warning("STDOUT:\n" + sb.toString());
} finally {
if (reader != null) {
reader.close();
}
}
}
从 Java 调用时 returns:
STDOUT:
lsof: WARNING: can't stat('/some/directory'): No such file or directory
lsof 4.85
latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
usage: [-?abhlnNoOPRtUvV] [+|-c c] [+|-d s] [+D D] [+|-f[cgG]]
[-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Use the ``-h'' option to get more help information.
谁能解释为什么?
我还不能发表评论,所以我很抱歉做出回答而不是发表评论。也许这不是问题,但 Mac OS 通常会自动切换引号和其他标记。这可能会破坏某些命令的执行。我认为 IDE 不会使用该设置,但如果您在 TextEditor 中编写示例 - 我不认为您是 btw - 这将会发生。
即使这不是你的问题,如果你还没有改变它,我建议你应该这样做以避免将来出现这个问题。
要更改此设置:
首选项 > 键盘
希望这对某人有所帮助。
new ProcessBuilder("lsof", "-F", "n", "+D", "'/some/directory'")
^ ^
删除 /some/directory
周围的单引号。它们被传递给 lsof
程序并被解释为路径名的一部分。
如果我在终端中 运行 它工作正常:
lsof -F n +D /some/directory
但是当我 运行 来自 Java 的相同内容时,它不会:
Process lsof = new ProcessBuilder("lsof", "-F", "n", "+D", "'/some/directory'").start();
lsof.waitFor();
if (lsof.exitValue() != 0) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(lsof.getErrorStream()));
String line = null;
StringBuffer sb = new StringBuffer();
while ((line = reader.readLine()) != null) {
sb.append(line);
sb.append("\n");
}
log.warning("STDOUT:\n" + sb.toString());
} finally {
if (reader != null) {
reader.close();
}
}
}
从 Java 调用时 returns:
STDOUT:
lsof: WARNING: can't stat('/some/directory'): No such file or directory
lsof 4.85
latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
usage: [-?abhlnNoOPRtUvV] [+|-c c] [+|-d s] [+D D] [+|-f[cgG]]
[-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Use the ``-h'' option to get more help information.
谁能解释为什么?
我还不能发表评论,所以我很抱歉做出回答而不是发表评论。也许这不是问题,但 Mac OS 通常会自动切换引号和其他标记。这可能会破坏某些命令的执行。我认为 IDE 不会使用该设置,但如果您在 TextEditor 中编写示例 - 我不认为您是 btw - 这将会发生。
即使这不是你的问题,如果你还没有改变它,我建议你应该这样做以避免将来出现这个问题。
要更改此设置: 首选项 > 键盘
希望这对某人有所帮助。
new ProcessBuilder("lsof", "-F", "n", "+D", "'/some/directory'")
^ ^
删除 /some/directory
周围的单引号。它们被传递给 lsof
程序并被解释为路径名的一部分。