为什么cd在我的shell脚本中不起作用?


2

解决了

我正在尝试在我的Linux Amazon-EC2服务器上创建一个shell脚本,它将启动我的Minecraft服务器,但cd命令说当我尝试更改到服务器可执行文件所在的目录时,它无法找到目录或文件。请注意我接下来没有任何类型的shell脚本的经验。是否必须具有此文件所在文件夹中的权限或文件本身?该文件名为“startServer”。

#!/bin/bash
cd /home/ec2-user/Minecraft
java -Xmx2048M -Xms2048M -jar minecraft_server.jar nogui

*我没有用文件扩展名保存它。我是不是该?它需要吗?


1
什么输出:ls -l~
sashang

MineCraft主目录中是否有目录?这就是sashang所得到的。
larsks

我复制并粘贴这个,所以我不给你缺少信息:总共4 drwxrwxr-x 3 ec2-user ec2-user 4096 Apr 27 00:30 Minecraft

是的,目录“我的世界”是否存在。

你确定它的cd命令不起作用而不是你的java命令抱怨缺少minecraft_server.jar。如果您发布错误的确切文本而不是描述它,将会有所帮助。
sashang

Answers:


2

为了使脚本可运行,您需要修改脚本的权限,以使其可执行。

在Linux或UNIX上更改权限的命令是chmod。

chmod +x ./name_of_your_script

将授予当前用户执行脚本的权限。

#!在脚本开头,向交互式shell指示脚本将由/ bin / bash解释,因此您实际上不需要在文件名中添加扩展名。但是,将.sh附加到shell脚本是一种常见的约定。


我应该使用脚本或文件的名称?

chmod:无法访问`./script \'':没有这样的文件或目录:没有这样的文件或目录/ ec2-user / Minecraft无法访问jarfile minecraft_server.jar

3
看起来你可能会将linux系统与无关的回车字符混淆 - 非常令人惊讶的是,它们出现在错误的引用部分内。有一些工具可以清理它,但你可以使用在Linux系统上运行的vi(或其他)手动重新输入脚本吗?
克里斯·斯特拉顿2012年

2
在Windows和Linux上终止文件中的行的方式有所不同。这就是你在那里得到回车字符的原因。如果要继续使用WinVi,可以检查编辑器的设置,以便将文件保存为UNIX行终止的UNIX文件。我会看那个。
Rob

1
是! 谢谢!我把一个新文件更改为UNIX设置并重写,它工作得很好。我想向所有人道歉,我之前没有提及WinVI编辑,谢谢Rob。

0

究竟是什么错误信息?我的猜测是:

cd: /Minecraft: No such file or directory

如果HOME未定义,则会发生这种情况,并且〜扩展为空字符串。


:没有这样的文件或目录/ ec2-user / Minecraft无法访问jarfile minecraft_server.jar

尝试使用完整路径而不是tilda,比如cd /home/user/Minecraft
gpojd

看起来$ HOME设置不正确。正如gpojd所说,停止使用波浪号。
威廉·普尔塞尔

没有工作相同的错误::没有这样的文件或目录/ ec2-user / Minecraft无法访问jarfile minecraft_server.jar

cd ..也不起作用

0

该脚本需要执行权限才能运行它; 为此,cd存储到目录并使用:

chmod u+rwx startServer 

我不认为这是你的问题。尝试使用minecraft_server.jar文件的完整路径,而不是使用cd:

#!/bin/bash
java -Xmx2048M -Xms2048M -jar /full/path/to/Minecraft/minecraft_server.jar nogui

我之前尝试过它并且它工作但它在shell脚本所在的目录中运行了jar,我希望jar在Minecraft目录中运行。

我改变了权限仍然

怎么样改变你去哪里:cd /fullpath/to/Minecraft

尝试过,同样的错误

从脚本中复制cd命令并在终端中运行它。它会给出同样的错误吗?如果是,则该目录不存在。我知道这听起来很愚蠢,但它绝对是Minecraft而不是我的世界?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.