首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mac问题上存在Shell脚本文件

Mac问题上存在Shell脚本文件
EN

Stack Overflow用户
提问于 2012-06-08 00:54:57
回答 4查看 1.6K关注 0票数 3

好了,我已经用Linux Ubuntu写了一个.sh文件,它工作得很好。然而,在Mac上,它总是返回找不到文件,即使它在相同的目录中。有人能帮我吗?

.sh文件:

代码语言:javascript
复制
if [ ! -f file-3*.jar ]; then
echo "[INFO] jar could not be found."
exit
fi

我只是想补充一下,这不适用于多个文件,它适用于重命名为多个结尾的文件。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-08 03:42:58

在对@Paul R的回答的评论中,您说“shell脚本也与jar文件在同一目录中。因此,他们可以在分配SH文件后双击它,默认情况下使用终端打开。”我怀疑这就是问题所在--当您通过双击shell脚本来运行它时,它会将工作目录设置为用户的主目录,而不是脚本所在的目录。您可以通过将脚本cd放到它所在的目录中来解决此问题:

代码语言:javascript
复制
cd "$(dirname "$BASH_SOURCE")"

编辑:当然,$BASH_SOURCE是在其他shell中不可用的bash扩展。如果您的脚本不能在bash中运行,请使用以下代码:

代码语言:javascript
复制
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 ]让我很紧张,因为如果有多个匹配的文件,它就会奇怪地失败。(我知道,这不应该发生;但是不应该发生的事情有任何恼人的倾向发生。)我会用这个来代替:

代码语言:javascript
复制
matchfiles=(file-3*.jar)
if [ ! -f "${matchfiles[0]}" ]; then
    ...

同样,如果您不能依赖bash扩展,这里有一个可以在任何POSIX shell中工作的替代方案:

代码语言:javascript
复制
if [ ! -f "$(echo file-3*.jar)" ]; then

请注意,如果有多个匹配,则此操作将失败(即,就像文件不存在一样)。

票数 1
EN

Stack Overflow用户

发布于 2012-06-08 01:04:47

我认为问题出在其他地方,因为脚本在Mac上可以正常工作:

代码语言:javascript
复制
$ 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下运行,或者在错误的工作目录下运行?

票数 0
EN

Stack Overflow用户

发布于 2012-06-08 01:22:18

并不是它对你不起作用,它对你的用户不起作用?OS的默认#!多年来一直在改变(参见this post) --但看起来你的评论说你已经准备好了shell。

您确定您的用户将JAR文件放在正确的位置吗?也许并不是脚本错了,而是它告诉了你正确的答案--脚本运行的地方缺少所需的文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10936333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档