如何通过双击来执行脚本,就像在Windows中执行.EXE文件一样?

如何使一个 bash 脚本像 Windows 中的 .exe 文件一样通过双击来执行?我尝试过创建一个启动器并将脚本分配给它,但有两个问题:
  1. 终端会闪烁、消失,并且没有任何操作。
  2. 必须指定在终端中运行才能正常工作。
我有一个脚本,在离线电脑上安装 tomcat,包括脚本中的所有 tomcat 依赖项。我需要让这个脚本能够像 Windows 那样通过双击来执行,因为大多数使用该脚本的人对 Ubuntu 不太熟悉。
忘掉上面的解释。我想要创建一个可以通过双击来运行的脚本,而不使用终端。有人知道怎么做吗?

我觉得你可能只是写了一个糟糕的桌面文件。你能把你写的 .desktop 启动器原样贴出来吗? - Jjed
还有,你看过这个吗?http://askubuntu.com/q/34597/24694 - Jjed
这只是一个启动器,你可以给它分配名称和命令,不是什么大创意。 - user61928
另外请注意,Linux中的脚本不是称为_bash_而是_shell,据我所知。 - cauon
3Muru给了我一个提示,对我很有用:http://askubuntu.com/questions/286621/how-do-i-run-executable-scripts-in-nautilus - draoi
1FYI给未来的访客:Nautilus是Ubuntu上的默认文件管理器,显然将在2019年的新版本中删除运行可执行文件的功能,以防止漏洞。关于此主题的文章在GitLab上的代码提交与讨论 - Sergiy Kolodyazhnyy
13个回答

我测试了这个方法,效果很好。确保你的脚本以正确的shebang开头,例如#!/usr/bin/env bash
然后按照以下步骤操作:
  • 按下Alt+F2来运行一个命令。
  • 输入dconf-editor并按下Enter
  • 在dconf-editor中转到:org ➤ gnome ➤ nautilus ➤ preferences
  • 点击executable-text-activation,从下拉菜单中选择:

    launch: 作为程序启动脚本
    或者
    ask: 弹出对话框询问如何处理。

    screenshot

  • 关闭dconf-editor。就这样!

替代方式,使用终端运行:

gsettings set org.gnome.nautilus.preferences executable-text-activation 'launch'

注意:该文件应可执行。您可能还需要更改文件的权限。右键单击并设置“允许将文件作为程序执行”。

screenshot

来源


这个方法很有效。只是提醒一下,"下拉菜单"可以通过点击executable-text-activation右侧列出的值来访问(默认值为"display")。 - ryanjdillon
10对于那些不能调用该应用程序的人,您需要首先使用sudo apt-get install dconf-editor进行安装。 - whale_steward
1这个在任何地方都有效,除了桌面。我怎样才能让它在桌面上也起作用呢?我使用的是Xubuntu 14.10。 - shrx
有没有办法在LXDE(适用于Lubuntu)上完成这个任务? - childofsoong
这在Slax Unix下运行得非常好 - 请访问http://slax.org了解这个真正强大的Unix系统,您可以从一个拇指驱动器启动它。 - raddevus
好答案!这个答案应该标记为正确的,对吧?哈哈。。 - Hendry Tanaka
在RHEL 7.2上运行得非常好...省了我一些麻烦.. - Brian Cowan
有没有办法在XFce中使这个工作起来? - jcubic
主要问题:*.cpp文件似乎也试图执行,但当然什么都不会发生。这真是相当痛苦。 - Sean Bone
按照设想,Alt+F2应该启动终端对吧?在那里浪费了几分钟的时间,试图在Ctrl+Alt+F2的tty中启动dconf-editor,因为在我的系统中Alt+F2没有任何反应。只需要启动终端,然后在那里启动dconf-editor。成功了。 - bad_keypoints

在Nautilus(又名Files)中

  1. 前往文件(Unity下为“编辑”(17.04或更早版本))> 首选项 > 行为选项卡

    screenshot

  2. 更改可执行文本文件的设置。

    screenshot


5现在是'文件 -> 首选项'。(17.04) - niry
太棒了!我个人认为这是正确的方式。 - codepleb
如何查看输出? - Amr Lotfy

我觉得这里缺少创建一个*.desktop文件的步骤。
$ cat shortcut-for-my-script.desktop
[Desktop Entry]
Type=Application
Terminal=true
Name=Click-Script
Icon=utilities-terminal
Exec=gnome-terminal -e "bash -c './script.sh;$SHELL'"
Categories=Application;

如果您为一个脚本创建多个*.desktop文件,您可以通过传递不同的参数创建多个配置,这是一种非常方便和用户友好的方式。


1这是Ubuntu的最佳答案。请注意,除非您确实要创建一个快捷方式,以便在终端窗口中查看脚本的输出,否则您可能不需要指定Terminal=TrueExec=gnome-terminal... 还请注意,您可以将Icon指向任何自定义的png文件。 - BuvinJ
虽然这个可能不被信任 - Mr-Programs
1我正在启动一个脚本,用来启动其他应用程序,然后在几秒钟后崩溃了,被SIGHUP信号打断。按照这里所述的方法使用bash -c "./script.sh; $SHELL"解决了这个问题。太好了! - gog

在Ubuntu和所有基于Unix的操作系统中,默认情况下没有设置任何文件为可执行。有两种方法可以做到这一点。
1. 右键单击要执行的脚本或文件。转到属性,然后转到权限选项卡。勾选“执行”复选框。
2. 打开终端cd进入文件所在的目录。输入chmod ugo+x filename。这将设置文件为可执行。
现在您的用户可以随心所欲地双击了。

2它仍然会询问您在终端中运行、显示或运行时该怎么做……所以这不是我需要的。 - user61928
只有这个答案在Gnome Ubuntu 17.04上有效,可以使桌面文件可执行。 - Kunok
这是用终端执行文件,而不是双击它。 - DimiDak
这种方法不允许你通过双击来启动。 - muyustan

对于Ubuntu 20.04:

  1. 打开文件(现在称为Files), 点击汉堡菜单并选择首选项

enter image description here

2. 转到“行为”选项卡,并从“可执行文本文件”部分选择适合的内容。

enter image description here


如果你正在使用XFce,那么你可以通过执行以下命令在Thunar中执行脚本:
xfconf-query --channel thunar --property /misc-exec-shell-scripts-by-default \
             --create --type bool --set true

或者通过使用gui xfce4-settings-editor 并创建相同的属性。
运行 xfce4-settings-editor,然后输入:
  • /misc-exec-shell-scripts-by-default

  • 布尔值

  • TRUE

picture of xfce4-settings-editor


请参阅此处有关如何使用Thunar中的自定义操作实现目标的说明(无需重新启用那个“风险”功能)。 - cipricus
还有这里关于如何使用Zenity并获得一个问题“编辑还是运行?” - cipricus

你需要检查3个要点:
1. Nautilus / Nemo配置:https://askubuntu.com/a/286651/301025 2. 脚本文件必须是可执行的:https://askubuntu.com/a/275714/301025 3. 文件系统必须允许执行操作: - 在控制台中输入`mount` - 检查你的文件系统是否有`noexec`标志 - 通过编辑`/etc/fstab`文件并重新挂载修改后的系统(例如,重新启动)来移除`noexec`标志

当你在桌面上创建一个到SHEL脚本或其他的启动项时,在命令行中,别忘了给脚本发送信号,以便在后台执行。
脚本将在完成任务后自动结束。

1我做了那个,但是终端只是闪烁而没有任何反应。 - user61928

根据umask的默认值,您默认情况下没有文件的执行权限,必须更改权限以获得执行权限,类似于这样:
chmod u+x filename

1Brother Ali,我肯定做了,这是显而易见的事情。 - user61928

作为对关于Thunar的答案的补充:那个答案将重新启用Thunar上的一个先前功能,即双击执行脚本。但是那个功能被认为存在安全风险。
为了避免这个问题,也许最优雅的解决方案是通过使用Zenity(类似于PCManFM和Nemo等其他文件管理器)在单击该文件时弹出一个带有问题的窗口,如“你想对该文件做什么:运行还是编辑?”:这里
一个替代方案是自定义操作,也许是Thunar最好的功能。
我用于运行可执行文本文件的命令是sh -c %f,用于名为“运行/执行脚本”的自定义操作。

enter image description here

外观条件只是“文本”:

enter image description here

可以使用类似的命令在终端中运行这样的脚本(“在终端中运行”),同时保持Xfce4终端打开。
xfce4-terminal -H -x %f

enter image description here

可选地,也许更好的是,为了隐藏除了可执行文件以外的所有文本文件的这些选项,一种方法是将外观使用限制在“外观条件”下的.sh文件(或者根据情况是.py文件等):

enter image description here

- 在相应地重命名可执行文件之前。