好的,我已经在 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/