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

我有一个 bash 脚本,比如:

#!/bin/bash


echo Hello world!

如何在 Terminal 中执行此操作?

543932 次浏览

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

然后打字

./scriptname.sh

如果在同一目录或

scriptname.sh

如果它在垃圾箱里的话。

请注意,您需要确保脚本具有执行权限。

另一种执行方式(这次不设置执行权限) :

bash /path/to/scriptname

你可以这样做:
sh scriptname.sh

使用 CD命令将目录更改为 脚本在哪里

然后打字

bash program-name.sh

首先,你必须使它可执行使用: chmod +x name_of_your_file_script

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

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

chmod +x your_filename.sh

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

$ sudo ./your_filename.sh

上面的“ .”代表工作目录。 注意! 如果您不在 bash 脚本文件所在的目录中,那么可以使用

cd Directory_name/write the complete path

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

这是一个老线索,但我偶然发现了它,我很惊讶,没有人提出了一个完整的答案还没有。开始了。

执行命令行脚本教程!

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

答案在下面,但首先... ... 如果你正在问这个问题,这里有一些其他的花边新闻可以帮助你:

困惑与冲突:

路径

  • 理解 路径(由 三人行添加以获得完整性)是很重要的。“路径”听起来像是一个类似于禅宗的 黑客公案之类的东西,但它只是一个目录(文件夹)列表,当在命令提示符下键入未知命令时,这些目录(文件夹)将被自动搜索。有些命令,如 ls可能是内置的,但大多数命令实际上是独立的小程序。(这就是 “ Unix 之禅”发挥作用的地方... ... “(i)让每个程序做好 的工作。”)

分机

  • 不像旧的 DOS 命令提示很多人记住,你 不需要一个’扩展’(如。或者。或者其他什么东西) ,但是它有助于记录事情的进展。它实际上仅供人类作为参考使用,而大多数命令行和程序一点也不在乎。不会痛的。但是,如果脚本名称包含扩展名,则必须使用它。它是文件名的一部分。

更改目录

  • 因为任何原因,没有都需要在任何特定的目录中。但是如果目录不在路径上(键入 echo $PATH查看) ,那么必须包含它。如果你想从工作目录运行一个脚本,在它之前使用 ABc1。这个 abc1的意思是“在工作目录里”。'

输入程序名称

  • 你需要输入运行文件的程序的名称(BASH 或 Python 或其他) ,除非你想这样做。这不会造成伤害,但有几次你可能会得到稍微不同的结果。

SUDO

  • 你做 没有需要 sudo这样做的任何一个。此命令是保留给作为另一个用户或“ root”(管理员)用户运行命令的。使用 sudo运行脚本会带来更大的把事情搞砸的危险。因此,如果您不知道使用 sudo的确切原因,就不要使用它。很棒的文章 给你

脚本位置..。

  • 放置脚本的一个好地方是在 ~/bin 文件夹中。
  • 你可以通过打字到达那里
# A good place to put your scripts is in your ~/bin folder.


> cd ~/bin # or cd $HOME/bin


> ls -l

您将看到一个具有所有者和权限的列表。您将注意到您“拥有”该目录中的所有文件。您可以完全控制这个目录,其他任何人都不能轻易修改它。

如果它不存在,你可以创建一个:

> mkdir -p ~/bin && cd ~/bin
> pwd


/Users/Userxxxx/bin



要在 Unix/Linux 类型系统的终端上“执行这个脚本”,你必须做三件事:

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

# type the name of the script with the full path
> /path/to/script.sh


# execute the script from the directory it is in
> ./script.sh


# place the script in a directory that is on the PATH
> script.sh


# ... to see the list of directories in the path, use:
> echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin


# ... or for a list that is easier to read:
> echo -e ${PATH//:/\\n}
# or
> printf "%b" "${PATH//:/\\n}"
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin


2. 告诉系统该脚本具有执行权限。(选择一个)

# set the 'execute' permissions on the script
> chmod +x /path/to/script.sh


# using specific permissions instead
# FYI, this makes these scripts inaccessible by ANYONE but an administrator
> chmod 700 /path/to/script.sh


# set all files in your script directory to execute permissions
> chmod +x ~/bin/*

有一个很酷的图表 给你的权限大讨论。

3. 告诉系统脚本的类型

  • 在脚本之前键入程序的名称。(注意: 使用此方法时,不需要执行(上面的 chmod 事件)
> bash /path/to/script.sh
...


> php /path/to/script.php
...


> python3 /path/to/script.py
...
  • 使用一个 开始吧,我看到你在你的例子中有(#!/bin/bash)。如果您将其作为脚本的第一行,系统将使用该程序来执行脚本。不需要输入程序或使用扩展名。
  • 使用“便携式”开始吧。你也可以让系统选择 PATH中第一个程序的版本,使用 #!/usr/bin/env后跟程序名(例如 #!/usr/bin/env bash#!/usr/bin/env python3)。正如深入讨论过的 给你一样,有利也有弊。

注意: 这个“可移植的”Shebang 可能并不像它看起来那样可移植。正如任何超过50年的东西,沉浸在无数的选择,从来没有完全工作的方式,你期望他们... 有一个激烈的辩论。我最近看到的一个实际上与大多数想法截然不同的想法是“便携式”perl-bang:

#!/bin/sh
exec perl -x "$0" "$@"
#!perl

还有一个办法

. /path/to/script

这个点是什么意思?