如何执行bash脚本?


19

所以我写了我的第一个bash脚本:

#!/bin/bash
echo 'hello world!'
exit

我知道它具有正确的bash位置,并且可以执行:

$ which bash
/bin/bash
$ chmod +x myscript.sh

现在,我想从命令行运行它,但是出现错误:

$ myscript.sh
myscript.sh: command not found

因此,我尝试了一下,它可以工作:

$ bash myscript.sh
hello world!

这就是我将始终需要执行的方式吗?我觉得我已经执行了其他脚本,而不必先于bash。如何运行myscript.sh而不必先进行bash

更新:这很好地解释了为什么以及如何执行bash脚本

Answers:


28

您必须使文件可执行。你可以这样做

chmod +x <filename>

脚本的名称在哪里,然后必须在其前面加上前缀,./以指示外壳程序在本地目录中运行文件,例如:

./script.sh

您只能运行您自己中的文件PATH或为它们指定路径的文件。./PATH默认情况下不在本地目录中,因为有人可能出于恶意目的使用它。想象一下一个脚本,该脚本ls放在目录中,您进入该目录,运行ls,该脚本做错了什么。

在使用它时,您可能希望通过运行shell而不是bash使它更易于移植,方法是使用:

#!/bin/sh

或通过运行bash(无论将其安装在什么位置)进行安装:

#!/usr/bin/env bash

我已经用chmod + x myscript.sh完成了。我做错了吗?
安德鲁2009年

1
您可能会丢失。//我已将其添加到答案中。
pupeno

1

除了费尔南德斯(Fernández)的建议外,在其前面还加了一点,例如:

./myscript.sh

出于安全原因,当前目录永远不会包含在执行路径中。


1

有3种执行bash脚本的方法。使用示例myscript.sh作为要执行的脚本。

方法1

将脚本作为子进程执行,如果不是写所有者,则会触发权限问题。您可以通过chmod更改权限。

$ chmod + x myscript.sh

$ ./myscript.sh

方法二

以当前用户身份运行脚本。如果bash脚本编写正确,则应该没有错误。

$ bash myscript.sh

方法3

类似于方法2,但快捷方式。请注意,这是基于您在当前会话中使用bash shell的假设。

$。myscript.sh

希望这可以帮助!:)

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.