Bash 说文件不存在

Bash 说文件不存在

我正在尝试运行这个 bash 脚本

#!/bin/bash

cd /ftp/slake/FiveM/cfx-server
[ -d cache ] || mkdir cache

exec FXServer $SERVER_ARGS $*

但它说 FXServer 不存在

img_FX服务器

我是 Linux 新手,所以这可能是一个相当愚蠢的失败

答案1

当您按名称运行可执行文件时,例如FXServer,您的 shell 将查看变量中的所有目录$PATH并尝试在其中一个目录中找到具有该名称的可执行文件。然后它将执行找到的第一个。由于/ftp/slake/FiveM/cfx-server不在您的 中$PATH,因此唯一可行的方法是如果您.的 中有当前目录 ( ) $PATH,而您似乎没有。简单的解决方案是仅使用可执行文件的完整路径,而不是仅按名称调用它:

#!/bin/bash

cd /ftp/slake/FiveM/cfx-server
[ -d cache ] || mkdir cache

./FXServer $SERVER_ARGS $*

./表示“当前目录”,因此将执行FXServer当前目录中名为的文件。我删除了,exec因为不需要它,并且非常具体的东西

假设此命令需要在 中运行/ftp/slake/FiveM/cfx-server,更好的版本是添加一个测试,如果由于某种原因我们无法更改到正确的目录(例如,如果它不存在),则退出。此外,你应该始终引用你的变量你呢几乎肯定想要$@而不是$*

#!/bin/bash

if cd /ftp/slake/FiveM/cfx-server; then
    [ -d cache ] || mkdir cache
    ./FXServer "$SERVER_ARGS" "$@"
else
    echo "Failed to change directory to /ftp/slake/FiveM/cfx-server" >&2
    exit 1
fi

相关内容