我该如何通过双击使这个file.sh文件可执行?

203

首先,我使用的是Mac电脑。

接下来,我需要执行一个名为“file.sh”的文件。每次我需要执行它时,我都必须打开终端并输入:

cd /Users/Jacob/Documents/folderWithFileInIt
bash file.sh

这个方法可行,但我觉得如果我能让文件双击执行会更快,你不觉得吗?

所以我的问题是,如何通过双击使该文件可执行?

我的想法有:

a) 在终端中输入类似chmod的命令并更改权限?

b) 创建一个文件,将上面编写的代码放入其中,然后将该文件设置为可执行?

c) 做一些自动化操作来完成这个过程?

哪种方法最好,或者是否有更好的方法?


1
如果你想要一个漂亮、易于点击的脚本,那么 Automator 是正确的工具。从你的问题中看来,你似乎已经知道了这一点,那么你的问题是什么? - Rob Napier
同样的问题,但我有JDK DMG、一些用于创建图标的应用程序文件夹和一些Jar文件。但是我尝试使用自动化程序或.command运行/创建失败了。 - SANTOSH
7个回答

414

默认情况下,*.sh 文件会在一个文本编辑器(如 Xcode 或 TextEdit)中打开。要创建一个在终端中执行的 shell 脚本,将其命名为带有“command”扩展名的文件,例如:file.command。这些文件默认会被发送到终端,并作为 shell 脚本执行。

您还需要确保该文件是可执行的,例如:

chmod +x file.command

如果没有这个,Terminal会拒绝执行它。

请注意,在这种特定的情况下,脚本不必以 #! 前缀开头,因为 Terminal 会特别安排使用默认 shell 来执行它。(当然,如果你想自定义使用哪个 shell 或者确保你可以在命令行中使用不同的 shell 执行它,你可以添加 #! 行。)

另外,请注意,Terminal 在执行 shell 脚本时不会更改工作目录。如果你实际上需要让它在特定的工作目录运行,你需要在脚本开头加上一个 cd 命令。例如,你可以使用 cd "$(dirname "$0")" 将当前工作目录设置为您的 shell 脚本所在的目录。


1
感谢更有帮助的答案。 - Jacob
51
你可以使用 cd "\dirname "$0"`"` 将当前工作目录设置为你的 shell 脚本所在的目录。 - gearsdigital
3
出于美观的原因,您还应右键单击.command文件并打开信息。在那里,您可以选择隐藏后缀(在名称和后缀下)。 - Bijan
@dig 我建议您将其发布为一个问题。 - Chris Page
1
@Nik 如果你不想在终端窗口里看到它,那么在终端中运行它就没什么意义了。相反,可以将其制作成应用程序包,其可执行文件是一个 shebang 脚本。或者可以创建一个 AppleScript 或 Automator Applet 来运行脚本。你还可以使用终端首选项来更改配置文件,以在进程退出时关闭窗口,但如果你只想运行无需用户交互的 shell 脚本,这并不是最好的解决方案。 - Chris Page
显示剩余6条评论

34

完全删除扩展名,然后双击它。大多数系统shell脚本都是这样的。只要有一个shebang,它就可以工作。


1
顺便提一下,“shebang”通常是放在任何行的前面的这一行:#!/bin/sh,但也可能不同,请阅读提供的链接了解其他情况。 - Lukas Liesis
这种方法不需要进行 chmod 吗? - Atul

14

您可以直接告诉Finder在终端中打开.sh文件:

  1. 选择文件
  2. 使用“cmd-i”键获取有关该文件的信息
  3. 在“打开方式”部分中,选择弹出菜单中的“其他…”
  4. 选择终端作为应用程序

这将产生与将其重命名为.command相同的效果,但是...您不必重命名它 :)


9
  1. 打开终端
  2. 输入-> nano fileName
  3. 粘贴批处理文件内容并保存
  4. 输入-> chmod +x fileName
  5. 它将创建exe文件,现在您可以双击它。

文件名应该在双引号内。 由于我使用的是Mac->在我的情况下,批处理文件的内容是

cd /Users/yourName/Documents/SeleniumServer

java -jar selenium-server-standalone-3.3.1.jar -role hub

它一定能正常工作


1

你可以使用chmod来更改文件的可执行性,方法如下:

chmod 755 file.sh

并使用此命令执行

./file.sh

2
欢迎来到SO!您的回答并没有为已经被接受的答案增加任何内容。请解释一下为什么这与已经存在的其他答案不同。 - GabrielOshiro

0

如果你给脚本文件命名为.app扩展名,那么你可以双击运行它。


0
nano ~/FILENAME

编写你的Bash脚本,使用Ctrl + x退出nano编辑器,并按下y保存。

将文件设置为可执行文件。

chmod 700 ~/FILENAME

太棒了,文件已经变成可执行文件,双击即可启动

无需使用 .sh 扩展名或者 shebang (#!) 前缀。


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