如何从终端运行.sh或.bat文件?

45

我这里有一个非常基本的问题,这个问题发生得如此杂乱无序,以至于到目前为止,我都选择忽略它。我下载了Tomcat Web服务器,并且《Murach的Java Servlets和JSP》这本书告诉我要导航到tomcat/bin目录并通过在终端中输入以下命令来启动服务器:

$ startup

然而,我遇到了以下错误:

-bash: startup: command not found

该目录中相关的文件为startup.sh和startup.bat。在终端输入这两个命令会返回相同的错误信息。

那么我的问题是,.bat和.sh文件是什么,我该如何运行这些文件?我已经阅读了几篇不同语言和软件程序的教程,有时候当教程要求在命令行中执行一大堆文件时,我会得到“命令未找到”的错误。有时可以正常工作,有时不能。这让我很困惑,那么解决这些“命令未找到”终端问题的常见方法有哪些呢?

11个回答

74

.sh 文件适用于*nix系统,.bat 文件适用于Windows。由于您的示例显示了一个bash错误,并提到了终端(Terminal),我假设您正在使用OS X。

在这种情况下,您应该进入该文件夹并键入:

./startup.sh

./的意思是你应该调用当前目录中的脚本。(或者,只需键入startup.sh的完整路径)。如果这样还不行,请检查startup.sh是否具有执行权限。


感谢pilsetnieks的解释。我按照您说的输入了内容,成功了!现在开始下一个安装问题。 - almel
如果您遇到权限被拒绝的问题,您可能需要执行 sudo ./startup.sh - Premier Bromanov
运行sudo ./scriptname.sh时,由于某些原因出现“命令未找到”错误。 - yrg
2
使用sh运行脚本,命令为"sh /path/to/script"。 如果权限被拒绝,请使用'sudo'。 - Akash Gutha
通过在系统上安装、配置和使用“Wine”软件包,可以在Linux上运行批处理文件。请参阅以下链接中的说明: https://www.linux.org/threads/running-windows-batch-files-on-linux.11205/#:~:text=Batch%20files%20can%20be%20run%20by%20typing%20%22start%20FILENAME.,cmd.exe%20%2Fc%20FILENAME. - Rex Charles

15

这是因为脚本不在您的$PATH中。请使用

./scriptname

您也可以将此复制到$PATH中的某个文件夹中,或更改$PATH变量,以便您始终只能使用脚本名称。但请注意,您当前的文件夹不在$PATH中是有原因的,可能会存在安全风险。

如果您仍然无法执行脚本,则可能需要检查其权限-显然,您必须具有执行权限才能执行它。使用以下命令:

chmod u+x scriptname

.sh文件是Unix shell脚本。 .bat文件是Windows批处理文件。


感谢提供备选步骤。 chmod u+x scriptname 它解决了“权限被拒绝”的错误。 - pankaj pundir

6

在Linux终端中输入bash script_name.sh./script_name。在使用./script_name之前,通过sudo chmod 700 script_name使脚本可执行,并在Windows中输入script_name.bat


5

拖放

对于像我这样的懒惰的Mac用户来说,最简单的方法是:从Finder中将startup.sh文件拖到终端窗口中,然后按回车键。

要关闭Tomcat,请使用shutdown.sh进行相同的操作。

您可以删除所有的.bat文件,因为它们只适用于Windows PC,在Mac或其他Unix计算机上没有用处。我会删除它们,因为这样更容易阅读该文件夹的列表。

文件权限

我发现新下载的Tomcat无法在我的Mac上运行,因为文件权限限制在启动过程中引发错误。我使用BatChmod应用程序,它在等效的Unix命令周围包装了GUI以重置文件权限。

端口转发

Unix系统保护编号低于1024的端口的访问。因此,如果您想使用Tomcat使用端口80,则需要学习如何进行“端口转发”,将传入的请求转发到Tomcat默认侦听的8080端口。要进行端口转发,您需要向内置于Mac OS X(和BSD)中的数据包过滤(防火墙)应用程序发出命令。在早些时候,我们使用ipfw。在Mac OS X 10.7(Lion)及更高版本中,苹果正在转向更新的工具pf


4

根据IsmailS的评论,在OSX上对我有效的命令是:

sudo sh ./startup.sh

3

在Windows系统上输入 startup 或者 startup.bat

在Unix系统上输入 ./startup.sh

(假设你当前位于tomcat/bin目录下)


1

输入

chmod 755 scriptname.sh

换句话说,给自己运行该文件的权限。我猜你只有对它的读写权限。

这并不一定能解决问题。@almel 报告的错误意味着 shell 搜索了 $PATH 环境变量给出的文件夹列表,但找不到 "startup" 文件。通过输入 "./startup",您可以绕过该搜索并告诉 shell:“在这个文件夹中查找我要运行的脚本”。 - redsoxfantom

1

0
  1. 在你的 .sh 文件顶部添加 #!bin/bash
  2. 运行 sudo chmod +x 你的 .sh 文件
  3. 执行 ./your.sh 文件

这些步骤是有效的~


#!bin/bash 应该改为 #!/bin/bash。如果感叹号后面没有斜杠,会触发错误:bin/bash: bad interpreter: No such file or directory - OXiGEN

-1

我的建议并不是来自终端,但这是一种更简单的方法。

对于.bat文件,你可以通过Wine来运行它们。使用这个视频来帮助你安装它: https://www.youtube.com/watch?v=DkS8i_blVCA。这个视频将解释如何安装、设置和使用Wine。只需在Wine中打开.bat文件,它就会像在Windows上一样运行。

通过这种方法,你还可以运行.exe文件以及.sh文件。

这比尝试解决各种终端代码要简单得多。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接