[英]How to get java to recognize symbolic links under cygwin
這是一個非常簡單的java程序來打印文件的第一行:
import java.io.*
public class test {
public static void main(String[] args) throws IOException {
System.out.print(new BufferedReader(new FileReader(args[0])).readLine());
}
}
當我在cygwin下運行此程序並將其傳遞給符號鏈接的名稱時,它會打印符號鏈接的內容,而不是該鏈接的目標:
$ echo foo > testfile
$ ln -s testfile symlink_to_testfile
$ java test testfile
foo
$ java test symlink_to_testfile
!<symlink> ?t e s t f i l e
我如何說服java遵循符號鏈接? 我希望有一些比自己實現重定向更簡單的東西。
我喜歡derpaderp的回答,所以我根據自己的需要調整了它。 更通用的是不假設-jar
選項並且沒有包含空格的參數的問題。 我已將此腳本移至/usr/bin/java
並使其可執行。
#!/bin/sh
JAVA_PATH="/cygdrive/c/Program Files/Java/jre7/bin/java"
declare -a WINDOWS_ARGS
i=0
for ARG in "$@"
do
if [ -e "$ARG" ]; then
# pathname argument is only converted if the file exists,
# so this trick may not be appropriate everywhere...
WINDOWS_ARGS[$i]="`cygpath -w $ARG`"
else
WINDOWS_ARGS[$i]="$ARG"
fi
(( i++ ))
done
"$JAVA_PATH" "${WINDOWS_ARGS[@]}"
我也有這個問題,所以我寫了一個shell包裝器,包括類似的東西
# java runs as native windows program, so convert pathnames
WINDOWS_ARGS=""
for ARG in $*
do
if [ -e $ARG ]
# pathname argument is only converted if the file exists,
# so this trick may not be appropriate everywhere...
then
WINDOWS_ARGS="$WINDOWS_ARGS `cygpath -w $ARG`"
else
WINDOWS_ARGS="$WINDOWS_ARGS $ARG"
fi
done
java -jar `cygpath -w myprogram.jar` $WINDOWS_ARGS
因為我無論如何都要從cygwin shell中調用一些東西。 如果您需要從窗口$環境啟動腳本,請參閱http://cygwin.com/ml/cygwin/2004-07/msg00163.html
cygpath
是轉換路徑字符串的建議方法...我到達此頁面是因為我想打開一個帶有硬編碼路徑的File
對象,該路徑可能是一個cygwin符號鏈接。 仍然不確定那個...運行一個子cygpath
似乎極端,並要求cygpath
在你的Windows路徑或cygwin目錄在每台計算機上的相同位置。
我認為沒有一個簡單的答案。 正如各種頁面所述,Cygwin是一個應用程序套件而不是操作系統,Sun不支持Cygwin上的Java。
但是, 可以從源代碼為Cygwin構建JDK 6。 當然, 這個頁面暗示它是可能的。 這是否給你一個了解Cygwin風格符號鏈接的JDK是任何人猜... :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.