gpt4 book ai didi

macos - Mac 问题上存在 Shell 脚本文件

转载 作者:行者123 更新时间:2023-12-02 04:00:01 25 4
gpt4 key购买 nike

好的,我已经在 Linux Ubuntu 中编写了一个 .sh 文件,它运行良好。然而,在 Mac 上,它总是返回找不到文件,即使它在同一目录中。谁能帮我吗?

.sh 文件:

if [ ! -f file-3*.jar ]; then
echo "[INFO] jar could not be found."
exit
fi

只是想补充一下,这不是针对多个文件,而是针对重命名为多个结尾的文件。

最佳答案

在对@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

请注意,如果有多个匹配项,这将失败(即表现得好像文件不存在一样)。

关于macos - Mac 问题上存在 Shell 脚本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10936333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com