答案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