如何在终端中执行bash脚本?


108

我有一个bash脚本,例如:

#!/bin/bash

echo Hello world!

如何在终端中执行此操作?


27
它具有执行权限吗?尝试a chmod +x scriptname然后./scriptname
奇怪的是,2010年

Answers:


49

$prompt: /path/to/script然后按回车。请注意,您需要确保脚本具有执行权限。


1
如果您已经在/path/to 目录中(例如,使用cd /path/to命令),则可以输入./script运行脚本的时间。不要忘记,在这种情况下,“ script”之前的“ ./”
FrViPofm


26

cd到包含脚本的目录,或将其放在$ PATH中的bin文件夹中

然后输入

./scriptname.sh

如果在同一目录或

scriptname.sh

如果它在bin文件夹中。


9
只有在脚本中设置了执行位的情况下,这才起作用。这可能需要解决。
Bryan Oakley '02

./scriptname.sh为我工作但scriptname.shscriptname.sh: command not found-rwxr-xr-x是其权限。
Spikatrix

1
给的建议 cd任何地方都会引起另一个常见的初学者误解。除非脚本内部具有依赖项,否则该依赖关系要求它在特定目录中运行(例如,需要读取脚本莫名其妙地无法提供指向其的选项的数据文件),所以您永远不需要在cd任何地方运行它,并且经常会不想。
三胞胎

24

您可以这样做:
sh scriptname.sh


6
Downvote:如果它是正确的Bash脚本,那是错误的。
2015年

1
给予好评:这是在Mac OS X的罚款,如果你的bash脚本是在同一个目录
卡尔·泰勒

30
@kot“碰巧对我有用”与“这是正确答案”相距甚远。它可以,如果工作sh是一个符号链接bash,或者如果脚本不使用任何猛砸特定结构。在前一种情况下,使用bash代替sh是唯一正确的便携式解决方案。在后一种情况下,这不是对这个特定问题的正确答案,因为OP专门询问了有关Bash脚本的建议。错误的答案是不负责任的;未能掌握差异的用户经常在此处发布信息,并需要显示为什么此“为我工作”答案对他们不起作用。
Tripleee '16

也是@kraftydevil ^关于这个主题的几个流行的重复目标之一:stackoverflow.com/questions/5725296/…–
Tripleee

5
@kot我再说一遍:在某些情况下,这种方法有效(就像您发现的一样),但是在一般情况下,它不是标题中问题的正确答案。至少,该答案应解释其工作条件;但我的建议是直接删除此答案。
Tripleee '16

14

首先,您必须使用来使其可执行chmod +x name_of_your_file_script

将其设置为可执行文件后,可以使用 ./same_name_of_your_file_script


10

使用cd命令将目录更改为脚本所在的位置

然后输入

bash program-name.sh

6
没有必要去cd任何地方。您可以指定任意复杂的路径名作为bash; 的参数。确实,任何采用文件名参数的程序都可以这种方式工作(或者令人震惊,令人麻木)。
Tripleee '16

10

这是一个旧线程,但是我碰巧遇到了这个问题,我很惊讶没有人提供完整的答案。所以这里...

执行命令行脚本教程!

问:如何在终端中执行此操作?

困惑与冲突:

  • 需要一个“扩展”(如.SH或的.py或其他任何东西),但它可以帮助跟踪的东西。不会疼的 但是,如果脚本名称包含扩展名,则必须使用它。
  • 需要在任何一个目录都以任何理由。
  • 需要键入的是运行,除非你想要的文件(BASH或Python或其他)的程序的名称。不会疼的
  • 不会需要sudo做任何这一点。该命令保留用于以其他用户或“ root”(管理员)用户身份运行命令。这里很棒的帖子。

(一个刚学会如何执行脚本的人除非有真正的需要(例如安装新程序),否则不应该使用此命令。放置脚本的好地方是〜/ bin文件夹。在终端提示下输入cd ~/bincd $HOME/bin。在该文件夹中,您将拥有完整权限。)

要从Unix / Linux类型系统上的终端“执行此脚本”,您必须做三件事:

  1. 告诉系统脚本的位置。(选一个)

    • 输入带有脚本名称的完整路径(例如/path/to/script.sh)。您可以通过输入pwd或来验证完整路径echo $PWD在终端中。
    • 从同一目录执行并使用./路径(例如./script.sh)。简单。
    • 将脚本放置在系统上的目录中,PATH然后键入名称(例如script.sh)。您可以PATH通过键入echo $PATHecho -e ${PATH//:/\\n}如果需要更整洁的列表来验证系统。
  2. 告诉系统脚本有权执行。(选一个)

    • 通过chmod +x /path/to/script.sh在终端中输入来设置“执行位” 。
    • chmod 755 /path/to/script.sh如果您喜欢数字,也可以使用。有一个凉爽的图表的大讨论在这里
  3. 告诉系统脚本的类型。(选一个)

    • 在脚本之前键入程序的名称。(例如BASH /path/to/script.shPHP /path/to/script.php),如果脚本具有扩展名,例如.php或.py,则它是脚本名称的一部分,您必须包含它。
    • 使用shebang,我#!/bin/bash在您的示例中看到()。如果您将其作为脚本的第一行,则系统将使用该程序执行脚本。无需键入程序或使用扩展名。
    • 使用“便携式” shebang。您还可以让系统使用首先选择的程序版本,然后PATH使用,#!/usr/bin/env然后加上程序名称(例如#!/usr/bin/env bash#!/usr/bin/env python3)。有利弊的深入讨论这里

1
很好的总结。也许在最后一个示例中,人们想起了script.sh和,script.php它们是这些脚本的文字文件名,并且如果在文件名中添加扩展名,则在运行脚本时需要包括扩展名(反之亦然;如果脚本没有没有扩展名,请不要输入扩展名)。这与DOS不同,例如在DOS中,您可以省略文件名中的.bator .exe,而文件需要具有较小扩展名的文件才能被视为可执行文件。
三人

1
另一个常见的错误初学者误解是之间的区别path/path./path,和~/path。我想您可能不想在这里解释它,但是可能链接到诸如...哦,当晚,我必须张贴此解释。
三胞胎


-2

如果您位于脚本文件可用的目录或文件夹中,则只需执行以下操作即可在可执行模式下更改文件许可权

chmod +x your_filename.sh

之后,您将使用以下命令运行脚本。

$ sudo ./your_filename.sh

上方的“。” 代表当前目录。注意!如果您不在bash脚本文件所在的目录中,则可以通过使用以下命令更改该文件所在的目录

cd Directory_name/write the complete path

命令。否则您的脚本将无法运行。


希望所有人都能做到这一点,因为我提到了有关此特定问题的所有相关概念。
哈桑·

如此处其他答案所述,如果您在不受信任的脚本上使用它会滥用您不必要地赋予它的权力,那sudo错误的,并且可能是非常错误的
三胞胎

cd某个地方的建议很难理解,但可能也错了。
重奏
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.