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

Posted

技术标签:

【中文标题】如何通过双击使这个 file.sh 可执行?【英文标题】:How do I make this file.sh executable via double click? 【发布时间】:2012-01-14 15:32:12 【问题描述】:

首先我使用的是 Mac。

接下来,我需要执行这个“file.sh”,我们将调用它。每次我需要执行它时,我都必须打开终端并输入:

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

没关系,但我觉得如果我让文件在双击时执行会快很多,你不觉得吗?

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

我的想法是:

a) 在终端中输入 chmod 之类的内容并更改权限?

b) 创建一个文件,将我上面写的代码放入其中 ^ 然后使该文件可执行?

c) 以某种方式实现自动化?

哪种方法最好,或者有更好的方法吗?另外请尽可能多地解释,我是终端的新手。谢谢。

【问题讨论】:

如果您想要一个漂亮、易于点击的脚本,那么是的,Automator 是正确的工具。您似乎从您的问题中知道这一点,那么您的问题是什么? 同样的问题,但我有 jdk dmg,一些用于创建图标的应用程序文件夹,一些 Jar ..但我无法通过 automator 或 .command 运行/创建 【参考方案1】:
nano ~/FILENAME

编写您的 bash 脚本并使用 Ctrl + x 退出 nano 并点击 y

使文件成为可执行文件

chmod 700 ~/FILENAME

Bingo,文件变成可执行文件,双击启动

无需 .sh 扩展名或 shebang (#!) 前缀即可工作。

【讨论】:

【参考方案2】:

您可以像这样使用chmod 更改可执行文件

chmod 755 file.sh

并使用此命令执行

./file.sh

【讨论】:

欢迎来到 SO!您的答案不会对已接受的答案添加任何内容。请解释为什么这与已经存在的其他答案不同。【参考方案3】:
    启动终端 类型 -> nano 文件名 粘贴批处理文件内容并保存 类型 -> chmod +x 文件名 它会创建exe文件,现在你可以双击它。

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

cd /Users/yourName/Documents/SeleniumServer

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

它肯定会起作用

【讨论】:

【参考方案4】:

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

【讨论】:

顺便说一句,“shebang”主要是任何行前面的这一行:#!/bin/sh 但它可以不同,请阅读提供的链接以了解其他情况。 这种方式是不是不需要做chmod?【参考方案5】:

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

    选择文件 获取信息 (cmd-i) 在“打开方式”部分的弹出菜单中选择“其他...” 选择终端作为应用程序

这将具有与将其重命名为 .command 完全相同的效果,除了……您不必重命名它:)

【讨论】:

【参考方案6】:

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

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

chmod +x file.command

没有这个,终端将拒绝执行它。

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

另请注意,终端在不更改工作目录的情况下执行 shell 脚本。如果您确实需要在特定工作目录下运行脚本,则需要以 cd 命令开始您的脚本。

【讨论】:

感谢您提供更有帮助的答案。 您也可以使用cd "`dirname "$0"`" 将当前工作目录设置为您的shell 脚本所在的目录。 出于美学原因,您还应该右键单击 .command 文件并打开信息。您可以选择隐藏后缀(在名称和后缀下)。 我使用这种方法通过open -n ... 命令运行应用程序。它可以工作,但每次终端窗口打开并向我显示“[进程完成]”时。是否有可能以某种方式阻止终端窗口的出现? @Nik 如果您不想让它显示在终端窗口中,那么在终端中运行它是没有意义的。相反,让它成为一个应用程序包,其可执行文件是一个 shebang 脚本。或者制作运行脚本的 AppleScript 或 Automator 小程序。您还可以使用终端首选项更改配置文件以在进程退出时关闭窗口,但如果您只想在没有用户交互的情况下运行 shell 脚本,这不是最佳解决方案。

以上是关于如何通过双击使这个 file.sh 可执行?的主要内容,如果未能解决你的问题,请参考以下文章

如何在shell中执行一个模块,这个模块需要传入参数

C语言如何执行批处理

阻止用户双击使屏幕上滑

如何通过双击图标来执行JAVA程序?

Linux系统编程——进程替换:exec 函数族

linux下如何运行可执行文件