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

Bal*_*lon 87 bash terminal

我有一个bash脚本,如:

#!/bin/bash

echo Hello world!
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*ce. 109

另一种执行它的方法(这次没有设置执行权限):

bash /path/to/scriptname
Run Code Online (Sandbox Code Playgroud)


pro*_*son 39

$prompt: /path/to/script并按Enter键.请注意,您需要确保脚本具有执行权限.

  • 如果您已经位于“/path/to”目录中,例如使用“cd /path/to”命令,则可以输入“./script”来运行脚本。不要忘记,在本例中是“./script”。 /' 在'脚本'之前 (2认同)

Joh*_*ker 24

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

然后键入

./scriptname.sh
Run Code Online (Sandbox Code Playgroud)

如果在同一目录或

scriptname.sh
Run Code Online (Sandbox Code Playgroud)

如果它在bin文件夹中.

  • 这仅在脚本设置了执行位时才有效.这可能需要解决. (5认同)

小智 24

你可以这样做:
sh scriptname.sh

  • @kot"碰巧为我工作"离"这是一个正确的答案"非常远.如果`sh`是`bash`的符号链接,或者脚本不使用任何特定于Bash的构造,它*可以*工作.在前一种情况下,使用`bash`而不是`sh`是唯一正确的便携式解决方案; 在后一种情况下,这不是这个特定问题的正确答案,因为OP专门询问了Bash脚本的建议.犯错误的答案是不负责任的; 没有经常发现差异的用户经常在这里发布,需要说明为什么这个"为我工作"的答案对他们不起作用. (27认同)
  • @kot我再说一遍:有些情况可以解决这个问题(就像你发现的那样),但在一般情况下,这不是标题中问题的正确答案.至少,这个答案应该解释它运作的条件; 但我的建议是简单地删除这个答案. (5认同)
  • Downvote:如果它是正确的Bash脚本那就错了. (4认同)
  • Upvote:这对我在Mac OS X上有用 (4认同)

Don*_*ini 11

首先,您必须使用以下命令使其可执行:chmod +x name_of_your_file_script.

在使其可执行后,您可以使用它来运行它 ./same_name_of_your_file_script


小智 9

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

然后输入

bash program-name.sh
Run Code Online (Sandbox Code Playgroud)

  • 任何地方都不需要`cd`; 你可以指定一个任意复杂的路径名作为`bash`的参数; 实际上,任何采用文件名参数的程序都是这样工作的(或者是可怕的,令人头脑麻木的). (5认同)

Eat*_*oes 6

还有一种方法

. /path/to/script
Run Code Online (Sandbox Code Playgroud)

点的含义是什么?

  • 这会在当前 shell 中执行需要调用的脚本。当您简单地运行脚本时,这并不是大多数人期望发生的情况。这可能会对您现有的环境产生副作用。 (2认同)

Ske*_*cal 5

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

执行命令行脚本教程!

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

困惑与冲突:

  • 不会需要一个“扩展”(如.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)来选择该程序的第一个版本。有利弊的深入讨论这里

  • 总结得很好。也许在最后一个例子中提醒人们`script.sh`和`script.php`是这些脚本的文字文件名,如果你在文件名中添加扩展名,则在运行脚本时需要包含它(反之亦然;如果脚本没有扩展名,则不要添加)。这与 DOS 不同,在 DOS 中,您可以从文件名中省略“.bat”或“.exe”,并且文件需要具有一小部分扩展名才能被视为可执行文件。 (3认同)