好了,我已经用Linux Ubuntu写了一个.sh文件,它工作得很好。然而,在Mac上,它总是返回找不到文件,即使它在相同的目录中。有人能帮我吗?
.sh文件:
if [ ! -f file-3*.jar ]; then
echo "[INFO] jar could not be found."
exit
fi我只是想补充一下,这不适用于多个文件,它适用于重命名为多个结尾的文件。
发布于 2012-06-08 03:42:58
在对@Paul R的回答的评论中,您说“shell脚本也与jar文件在同一目录中。因此,他们可以在分配SH文件后双击它,默认情况下使用终端打开。”我怀疑这就是问题所在--当您通过双击shell脚本来运行它时,它会将工作目录设置为用户的主目录,而不是脚本所在的目录。您可以通过将脚本cd放到它所在的目录中来解决此问题:
cd "$(dirname "$BASH_SOURCE")"编辑:当然,$BASH_SOURCE是在其他shell中不可用的bash扩展。如果您的脚本不能在bash中运行,请使用以下代码:
case "$0" in
*/*)
cd "$(dirname "$0")" ;;
*)
me="$(which "$0")"
if [ -n "$me" ]; then
cd "$(dirname "$me")"
else
echo "Can't locate script directory" >&2
exit 1
fi ;;
esac顺便说一句,构造[ ! -f file-3*.jar ]让我很紧张,因为如果有多个匹配的文件,它就会奇怪地失败。(我知道,这不应该发生;但是不应该发生的事情有任何恼人的倾向发生。)我会用这个来代替:
matchfiles=(file-3*.jar)
if [ ! -f "${matchfiles[0]}" ]; then
...同样,如果您不能依赖bash扩展,这里有一个可以在任何POSIX shell中工作的替代方案:
if [ ! -f "$(echo file-3*.jar)" ]; then请注意,如果有多个匹配,则此操作将失败(即,就像文件不存在一样)。
发布于 2012-06-08 01:04:47
我认为问题出在其他地方,因为脚本在Mac上可以正常工作:
$ if [ ! -f file-3*.jar ]; then echo "[INFO] jar could not be found."; fi
[INFO] jar could not be found.
$ touch file-302.jar
$ if [ ! -f file-3*.jar ]; then echo "[INFO] jar could not be found."; fi
$也许你的脚本在错误的shell下运行,或者在错误的工作目录下运行?
发布于 2012-06-08 01:22:18
并不是它对你不起作用,它对你的用户不起作用?OS的默认#!多年来一直在改变(参见this post) --但看起来你的评论说你已经准备好了shell。
您确定您的用户将JAR文件放在正确的位置吗?也许并不是脚本错了,而是它告诉了你正确的答案--脚本运行的地方缺少所需的文件。
https://stackoverflow.com/questions/10936333
复制相似问题