【发布时间】:2016-08-07 22:02:31
【问题描述】:
我们无法计算出这个或创建一个可以重现这个的样本。
我正在尝试使用外部 sh 文件来调用 hadoop sh 文件
我的文件.sh
# workingdir = /data1/some/path/lib
WORKINGDIR=`cygpath -p -w -m "$WORKINGDIR"`
# so the above in windows land is C:/some/path/lib
# HADOOPCMD essentially is a call to hadoop.sh
$HADOOPCMD jar $WORKINGDIR/myjar.jar
hadoop.sh
echo "$@" // still C:/some/path/lib
exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "$@"
但是,当在 cygwin 中扩展“$@”时,生成的路径变为 C:\some\path\lib,然后 hadoop.sh 抱怨它找不到 jar...不是有效的 JAR:C:\some \路径\库
但是,如果我要硬编码 myfile.sh 中的路径;它有效
$HADOOPCMD jar C:/some/path/lib/myjar.jar
问题
- 为什么exec命令的“$@”把WORKINGDIR变量中的/改为\?
- 为什么硬编码路径有效?
- 如何让它与变量替换一起工作?
【问题讨论】:
-
hmm .. 我想我通过引用 $WORKINGDIR 让它工作了,所以命令是 $HADOOPCMD jar "$WORKINGDIR"/myjar.jar
-
一般的经验法则是“总是引用你的变量扩展”。
标签: windows bash cygwin filenames slash