如何运行.sh脚本?

每当我打开一个.sh文件时,它会在gedit中打开,而不是终端。我找不到类似于“右键单击”→“使用其他应用程序...”→“终端”的选项。
我该如何在终端中打开这个文件?

这个脚本的目的是为了设置环境变量以供后续使用吗? - Rob
3你不应该在脚本上使用扩展名。将来的某个时候,你可能会发现使用另一种语言更适合完成当前脚本正在执行的任务。那么你就会面临一个问题。是保留旧名称,但扩展名完全误导,还是重新命名它,可能需要编辑很多使用了你的脚本的地方? - geirha
你不需要文件扩展名。虽然有也不错,但并非必需。操作系统不看文件的扩展名,而是看数据本身。 - ActionParsnip
8嗯,如果你将 foo.sh 重写为 Ruby,你可以始终使用 .sh 文件来启动 ruby foo.rb - glenn jackman
在Dolphin中,你可以按下F4键,打开一个控制台。 - Motte001
@ActionParsnip 我之前的印象是Linux会打开文件并查看文件头来确定它正在处理的文件类型? - Kellen Stuart
16个回答

给你的脚本赋予执行权限:
chmod +x /path/to/yourscript.sh

运行你的脚本:
/path/to/yourscript.sh

由于 . 表示当前目录:如果 yourscript.sh 在当前目录中,您可以简化为:
./yourscript.sh

19只有一个答案可以显示在终端中添加执行权限的方法。 - Hailwood
113如果你执行 bash /path/to/yourscript.sh 的话,就不需要 chmod +x - Aleksandr Levchuk
6实际上,如果脚本需要设置一些环境变量,你可以使用. /path/to/yourscript.sh - Rob
2没有人提到传统的 ./path/to/yourscript.sh(后面没有空格)吗?我觉得那个是最简单和最容易使用的... 但不管怎样,这里是我的备选方案,几乎可以达到与 ./ 相同的效果,虽然我不明白为什么你不使用 ./(FILENAME=~/rem4space.sh;SLL=$(cat $FILENAME|head -1|sed 's:^#!\(.*\):\1:g');[ ! -z $SLL ] && exec $SLL $FILENAME;sh $FILENAME) ... 根据你的喜好编辑 FILENAME。还请注意,如果没有替代方案,将使用 sh - MiJyn

你需要将shell脚本标记为可执行文件,以便从文件管理器中运行它们:
1. 右键点击你的.sh文件,选择“属性”: ![enter image description here](https://istack.dev59.com/MsmIS.webp)
2. 在“权限”选项卡中,勾选“允许作为程序执行文件”: ![enter image description here](https://istack.dev59.com/JuFMt.webp)
3. 关闭“属性”窗口,双击该文件。一个对话框将弹出,询问您是否要在终端中运行该脚本: ![enter image description here](https://istack.dev59.com/igexS.webp)

12这在Ubuntu 13.04上不起作用。无论如何都会在gedit中打开,从不要求我执行。编辑:算了,imjustmatthew解答了这个问题。 - mpen
在使用之前,我们需要为文件设置执行权限,可以使用chmod命令。chmod +x filename.sh 或者 chmod 755 filename.sh - Arvind Rawat
我没有弹出窗口!IDE会直接打开,而不是弹出一个窗口。 - Green
为什么我在我的界面上找不到“在终端中运行”的选项?(Ubuntu 18.04) - Daniel Möller
好的,那么我该如何让它记住自动“执行”(我的选项与你的有些不同),这样每次运行时我就不必选择了呢?我希望只需双击即可运行。 - Michael
3@DanielMöller,这是你问题的答案。 https://askubuntu.com/questions/38661/how-do-i-run-sh-files/1065846#1065846 - Akhilesh Dhar Dubey
如果使用Nautilus,或者当前的"Files",您必须按照这个答案https://askubuntu.com/a/537318/159431中所描述的设置可执行文本文件的首选项。 - iyrin

打开终端并导航到包含.sh文件的文件夹。然后输入以下命令:
sh <name of file>.sh

2打开任何应用程序的最佳方法是: 首先导航到.sh目录,然后在命令提示符中打开它。 使用sh <文件名>.sh命令来执行脚本。 如果需要权限,请使用chmod +x /path/to/yourscript.sh命令来赋予执行权限。 或者右键点击文件,选择更改权限为所有用户。 - Durgesh Kumar
这是我偏爱的做法。@DurgeshKumar 不错的建议。 - wlwl2
尝试在Alpine上运行一个sh脚本。虽然其他答案无效,但这个有效。 - Vankog
如何使用 $ sudo bash asdad.sh - Manoj Kumar

先决条件

在运行.sh文件之前,您需要将其设置为可执行:

  1. 右键单击文件
  2. 选择属性
  3. 选择权限
  4. 选择允许作为程序执行文件

警告

确保您信任从中获取文件的来源。它可能是一个病毒

非常简单的方法

  1. 双击文件
  2. 点击在终端中运行

这种方法有问题。终端会立即关闭,您将无法看到输出结果。

简单的方法

  1. 打开应用程序 -> 辅助工具 -> 终端
  2. 将.sh文件拖放到终端中并按Enter键

专业人士的做法

打开应用程序 -> 辅助工具 -> 终端
找到.sh文件的位置
使用ls和cd命令 ls会列出当前文件夹中的文件和文件夹。试一下:输入"ls"并按回车。
一旦您看到要进入的文件夹,请运行cd,后面加一个空格,然后是文件夹名。
如果您进入了一个不想进入的文件夹,请运行cd ..来返回上一级。
运行.sh文件
一旦您通过ls看到了例如script1.sh这样的文件,请运行以下命令:
./script.sh

为什么要用复杂的方式?

终端具有一组功能强大的工具,可以通过输入命令来访问。专业人士通过输入lscd来定位.sh文件。一旦你进入了正确的当前文件夹,你可以像这样运行脚本:

./script1.sh

或者你可以运行并将输出重定向到文件中:
./script1.sh > out.txt

或者你可以根据关键词(例如“苹果”)过滤输出,然后重定向到一个文件中:
./script1.sh | grep apples > ./only-apples

有很多事情你只需要输入几个命令就可以对那个文件进行操作。
另外一个例子,你只需要一个简单的命令就可以从互联网上下载一个文件。
wget www.google.com/images/logos/ps_logo2.png

然后像这样打开文件:
shotwell ps_logo2.png

10我不确定“专业人士的做法”是否正确,更多是一种“简单的方式”,一种“高级(用于控制输出)的方式”。 - Hailwood
很高兴知道我在第一次尝试时就像专业人士一样做到了。我原以为那只是普通用户的方式。 - NelsonGon

在Ubuntu 13.04上,通过Nautilus打开的可执行文件默认会在gedit中打开,而不是提示用户执行它们。要启用经典行为,您需要调整偏好设置:
Nautilus → 编辑菜单 → 偏好设置 → 行为选项卡 → 单击旁边的单选按钮以每次询问。

问问题的人在谈论的是Ubuntu 10.10。 - edwin
2谢谢!我不知道为什么他们要改变这个,也搞不清楚怎么执行任何操作。 - mpen
2这是最新版本Ubuntu的正确答案。 - gaRex
你怎么在15.10版本中找到Nautilus呢? - yaakov
3从Ubuntu 18.04开始,您可以通过打开一个目录,然后在顶部栏中单击“文件->首选项”来访问偏好设置。 - tparker

对于Ubuntu 18.04,有一点修改,因为你不会得到一个弹出对话框。
所以你需要做的是:
右键点击文件,选择“首选项”>选择“行为”选项卡>在可执行文本文件下标记“询问要执行什么操作”的选项。
现在,当你双击任何.sh文件时,你将会得到一个弹出窗口,在那里你可以选择“在终端中运行”选项来运行你的.sh文件。

enter image description here


2有点奇怪,右键菜单中没有“首选项”选项。我只有属性。 - Nicholas Humphrey
对我来说,这也让它要求安装其他完全无关的扩展,真是很烦人。有没有办法只让它在以.sh为后缀的文件上提出这个要求呢? - Kvothe
+1,在20.04版本中也适用。 - userfuser

使用cd命令进入存放.sh文件的目录。例如,我将sh文件存放在~/Desktop/shell_practice/test.sh中。

首先执行pwd命令来确定当前所在位置,如果返回/home/username(其中username是您的真实用户名),则可以运行以下命令:

cd Desktop/shell/practice

如果你似乎在别的地方,你可以使用绝对路径。
cd ~/Desktop/shell/practice

或者

cd $HOME/Desktop/shell/practice

甚至

cd /home/$USER/Desktop/shell/practice

这些都是描述同一个地方的方式。一旦你到达了剧本所在的位置,就输入。
ls

如果您能在输出中看到sh文件,您可以使用chmod使其可执行。在我的情况下,请记住文件名是test.sh,因此我将运行
chmod u+x test.sh

现在我们在与脚本相同的目录中,我们必须告诉shell我们想要执行该文件,通过给出它的位置./(当前目录后跟路径分隔符,以区分它与文件名)。要运行我的文件,我会输入:
./test.sh

如果您的脚本编写正确,它将可以无错误地运行...
这是一个实时示例: 这是一个实时示例

这对我在Ubuntu上安装Netbeans很有效。 - RuD3B0y
2嗨,@RuD3B0y,我尽量为新手提供最好的答案,不涉及高科技内容。如果你有任何修改意见,欢迎提出。 - TheExorcist

有几种方法可以做到这一点。

选项1

  1. 在终端中,使用 cd(改变目录)命令访问 Bash 文件所在的目录。

    例如:cd Downloads

  2. 运行 bash <filename>.sh

    .run 文件也适用于此方法。以下是一个示例 在此网页上更新 Rhythmbox 的用法。

选项2

  1. 在终端中,导航到 bash 文件所在的目录。

  2. 运行 chmod +x <filename>.sh

  3. 在 Nautilus 中打开该文件。


2个主要步骤。
1. 在终端中,使用gedit编写并保存带有".sh"扩展名的脚本到桌面上。 (但任何文本编辑器都可以使用)
2. 打开Nautilus并右键单击script.sh文件。 - 在属性下,勾选“允许执行文件...” - 在Nautilus菜单中,点击文件,然后选择首选项,再选择行为 - 勾选“打开时运行可执行文本文件”。
现在,当您在桌面上双击该文件时,它应该会执行。 不需要使用"."或"./"。

  1. 右键点击 .sh 文件并将其设置为可执行。

  2. 打开终端(Ctrl+Alt+T)。

  3. .sh 文件拖入终端窗口中,然后欣赏它的运行。


2欢迎来到Ask Ubuntu!我建议你编辑这个答案,加入关于如何进行第一步的具体细节。(另请参阅如何撰写好答案?以获取有关在AskUbuntu上被认为最有价值的回答类型的一般建议。) - David Foerster