如何运行.sh脚本?


344

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

如何在终端中打开此文件?


该脚本是否旨在设置环境变量以供进一步使用?
罗布

1
您不应该在脚本上使用扩展名。在将来的某个时候,您可能会发现另一种语言更适合执行当前脚本正在执行的任务。然后你有一个问题。您是否保留旧名称(带有完全误导性的扩展名),或者重命名它,可能不得不在许多使用脚本的地方进行编辑?
盖尔哈2011年

您不需要文件扩展名。很高兴有,但不是必需的。操作系统不查看文件扩展名。它查看数据
ActionParsnip

5
恩,如果您用ruby重写foo.sh,则始终可以使用.sh文件启动ruby foo.rb
glenn jackman

在Dolphin中,您可以按F4并打开一个控制台
Motte001 '16

Answers:


523

授予脚本执行权限:

chmod +x /path/to/yourscript.sh

并运行您的脚本:

/path/to/yourscript.sh

因为.是指当前目录:如果yourscript.sh在当前目录中,则可以简化为:

./yourscript.sh

13
+1仅答案以显示仅通过终端方式添加执行权限。
冰雹

83
如果您这样做,bash /path/to/yourscript.sh则不需要chmod +x
Aleksandr Levchuk 2011年

4
实际上,. /path/to/yourscript.sh如果脚本必须设置一些环境变量,则可以使用。
罗布

1
没有人提到传统的:(./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

88

您需要将Shell脚本标记为可执行文件,以从文件管理器中运行它们:

  1. 右键单击.sh文件,然后选择“ 属性”

    在此处输入图片说明

  2. 在“ 权限”选项卡中,选中“ 允许将文件作为程序执行”

    在此处输入图片说明

  3. 关闭“ 属性”窗口,然后双击文件。将弹出一个对话框,为您提供在终端中运行脚本的选项:

    在此处输入图片说明


10
这在Ubuntu 13.04中不起作用。无论如何都保持打开状态,从不要求我执行。编辑:Nvm,imjustmatthew回答了这个问题。
mpen

在使用此功能之前,我们需要使文件具有使用chmod执行的权限。chmod + x filename.sh或chmod 755 filename.sh
Arvind Rawat

我没有弹出窗口!IDE立即打开,而不是弹出窗口
绿色

为什么在界面的任何地方都找不到“在终端中运行”?(Ubuntu 18.04)
丹尼尔·莫勒

1
@DanielMöller,这是您问题的答案。askubuntu.com/questions/38661/how-do-i-run-sh-files/...
Akhilesh达尔杜贝

33

打开终端,然后导航到文件所在的.sh文件夹。然后输入:

sh <name of file>.sh

打开任何应用程序的最佳方法。导航到.sh目录,然后在命令提示符下将其打开。如果需要权限,请使用sh <如上所示的文件名> .sh,请使用chmod + x /path/to/yourscript.sh或右键单击并更改所有权限
Durgesh Kumar

24

先决条件

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

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

警告

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

很简单的方法

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

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

简单的方法

  1. 打开应用程序->附件->终端
  2. 将.sh文件拖放到终端中,然后按Enter

专业人士的做法

  1. 打开应用程序->附件->终端
  2. 找到.sh文件的位置

    • 使用lscd命令
    • ls将列出当前文件夹中的文件和文件。试试看:键入“ ls”,然后按Enter。
    • 看到要进入的文件夹后,运行cd,然后输入空格,然后输入文件夹名称
    • 如果你进入的时候,你要的不是文件夹,运行cd ..去一个级别
  3. 运行.sh文件

    • 一旦你可以看到例如script1.shls运行以下命令:

      ./script.sh

为什么要这么复杂?

该终端具有一组功能强大的工具,可通过键入命令来访问它们。专业人士通过键入ls和查找.sh文件cd。进入正确的当前文件夹后,您可以运行以下脚本:

./script1.sh

或者,您可以运行并将输出重定向到文件:

./script1.sh > out.txt

或者,您可以过滤关键字(例如“苹果”)的输出,然后重定向到文件:

./script1.sh | grep apples > ./only-apples

只需输入一些命令,您就可以对该文件执行成千上万的操作。

另外一个,您可以使用一个简单的命令从Internet下载文件:

wget www.google.com/images/logos/ps_logo2.png

然后像这样打开文件:

shotwell ps_logo2.png

6
林不知道该专业人士的方式做到这一点是正确的,它更多的的情况下,简单的方式先进的(对于控制输出)方式
Hailwood

很高兴知道我是按照专业人士在第一次审判中所做的方式来做的。我认为这是基本用户的方式。
NelsonGon

19

在Ubuntu 13.04上,Nautilus中打开的可执行文件现在默认情况下在gedit中打开,而不是提示用户执行它们。要启用经典行为,您需要调整首选项:

Nautilus→编辑菜单→首选项→行为选项卡→每次单击询问附近的单选按钮。


提出问题的人正在谈论Ubuntu 10.10
edwin

1
谢谢!!!我不知道他们为什么要改变这一点,不知道如何执行任何事情。
mpen

1
这是最新的Ubuntu的正确答案。
gaRex 2015年

您如何在15.10到达鹦鹉螺?
Yaakov Ainspan '16

从Ubuntu 18.04开始,您可以通过以下方式访问首选项:打开目录,然后单击顶部栏中的“文件->首选项”。
tparker

7

.sh通过使用转到文件所在的目录cd。在此示例中,我将sh文件存储为~/Desktop/shell_practice/test.sh

首先pwd确定您的位置,然后返回/home/usernameusername真实用户名在哪里),则可以运行

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

现在,我们与脚本位于同一目录中,我们必须通过提供文件的位置./(当前目录后跟路径分隔符,以将其与文件名区分开)来指定要执行该文件的外壳程序。要运行我的文件,请输入:

./test.sh

如果您的脚本编写正确,它将正确运行。

这是一个实时示例: 这是现场示例


这对我来说可以在ubuntu上安装Netbeans
RuD3B0y

1
Wb,@ RuD3B0y,我试图为菜鸟们保留最好的答案,没有高科技内容,如果您进行一些编辑,欢迎您。
TheExorcist

4

2个主要步骤。

  1. 在终端中,使用gedit编写扩展名为“ .sh”的脚本并将其保存到桌面。(但是可以使用任何文本编辑器)

  2. 打开Nautilus,然后右键单击script.sh文件。

    • 在属性下,选中“允许执行文件。”

    • 在Nautilus菜单中,单击文件,然后选择首选项,然后单击行为

    • 检查“打开时运行可执行文本文件”。

现在,当您双击桌面上的文件时,它将执行。不需要../


3
  1. 右键单击该.sh文件,使其可执行。

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

  3. .sh文件拖到终端窗口中,敬请期待。


1
欢迎来到Ask Ubuntu!我建议编辑此答案以将其扩展为有关如何执行第一步的特定详细信息。(另请参阅“我如何编写一个好的答案?”,以获取有关在AskUbuntu上认为最有价值的答案的一般建议。)
David Foerster

3

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

选项1

  1. 在终端中,使用Bash文件所在的目录cd(更改目录)。

    例如 cd Downloads

  2. bash <filename>.sh

    这也适用于.run文件。此网页上有一个有关更新Rhythmbox的用法示例

选项2

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

  2. chmod +x <filename>.sh

  3. 在Nautilus中,打开文件。


3

对于Ubuntu 18.04,做了一些修改,因为您没有弹出对话框。

因此,您需要做的是:

右键单击“文件”,选择“可执行文件”下的“首选项”>“选择行为”选项卡>“标记要做什么”选项。

现在,当您双击任何.sh文件时,将弹出一个窗口,您可以在其中选择“在终端中运行”选项来运行.sh文件。

在此处输入图片说明


2

在Ubuntu 16.04中,这是在终端中打开它的方法:

前往File Manager > Edit > Preferences > BehaviorExecutable Text Files选择 Ask each time

问题在于默认情况下将其设置为View Executable Files when they are opened


1

如果将您的Shell脚本或其他可执行文件放置在/ usr / local / bin中,则会在无需在命令行中提供文件夹路径或在名称中添加./的情况下找到并执行它们。例如,我创建了以下简单的三行bash脚本来显示磁盘UUID:

#!/bin/bash
echo "* UUIDs must match in /etc/fstab and /boot/grub/menu.lst"
sudo blkid

我将文件命名为uuid并将其放在/ usr / local / bin中。我需要在命令行上输入的是:

uuid

0

好吧,我也面临着同样的问题。我想执行.sh文件,并在CentOS 7上用Gedit打开了它。这是我的工作:

  1. 我导航到.sh要执行的文件的路径。
  2. 我打开了终端。
  3. 然后,我只是将其拖放到终端窗口上,它自动将该文件以及路径作为输入。
  4. 按下Enter键,您一切顺利!

0

我在一些发行版中发现的问题是它们在Nautilus中隐藏了preferences选项,但是使用Gnome3在Ubuntu和其他发行版中对其进行修复是相同的(实际上只是完成了Fedora版本,并发布了实际的修复提醒我)将来如何)。

  1. 安装 dconf-editor

    sudo apt-get install dconf-editor
  2. dconf-editor使用您要使用的用户帐户运行,即不是root用户

    dconf-editor
  3. 导航到以下架构:

    org.gnome.nautilus.preferences

  4. 将默认选项更改为默认情况下不打开:

    找到executable-text-activation点击的单词display并更改为ask

这样您就可以选择编辑,查看或运行文件


0

我是Linux的菜鸟,但我遇到了同样的问题。如果其他所有方法均失败:

  1. 打开终端
  2. 打开包含.sh文件的文件夹
  3. 将文件拖放到终端窗口中
  4. 文件的路径出现在终端中。按Enter
  5. 瞧,您的.sh文件正在运行。

-2

您也可以.在其他答案的建议下使用技巧。

例如:

chmod +x filename.sh,假设您已经转到文件的路径,然后使用以下任一命令运行文件:

sh filename.sh

./filename.sh

. filename.sh

2
警告:这三个命令等效。如果您的shebang引用了其他二进制文件(例如Stack),则第三个命令将尝试使用Bash解析参数,这将失败。
Jezen Thomas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.