如何在不使用"sh"或"bash"命令的情况下运行shell脚本?

Ram*_*ain 246 bash shell alias sh

我有一个shell脚本,我想运行而不使用"sh"或"bash"命令.例如:

代替: sh script.sh

我想用: script.sh

我怎样才能做到这一点?

PS(i)我不太使用shell脚本,我尝试阅读别名,但我不明白如何使用它们.

(ii)我还阅读了关于将脚本与PATH变量中的另一个文件相关联的内容.我正在使用我的大学服务器,但我没有权限在这些位置创建文件.

fge*_*fge 417

在文件顶部添加"shebang":

#!/bin/bash
Run Code Online (Sandbox Code Playgroud)

并使您的文件可执行(chmod +x script.sh).

最后,修改路径以添加脚本所在的目录:

export PATH=$PATH:/appropriate/directory
Run Code Online (Sandbox Code Playgroud)

(通常,您希望$HOME/bin存储自己的脚本)

  • 查看有关路径的评论.您需要将脚本放在一个必须附加到PATH的目录中. (5认同)
  • `source./ my-cool-script`(或`./ my-cool-script`)将使用脚本中定义的任何变量污染当前的shell会话.除非您希望通过设置环境变量,更改目录等来显式修改shell会话,否则不应使用Sourcing.否则可能导致非常可怕的错误,因为来自一个脚本执行的变量(如果通过源完成)可能会影响另一个脚本执行. (4认同)
  • 如果您确定脚本文件夹在PATH中,并且在没有`./`的情况下它仍然无效,那么您可能会发生名称冲突.尝试重命名. (3认同)
  • 它在我的情况下不起作用.但是`source script.sh`运行正常,或者更确切地说是`source <filename_without_any_extension_type>` (2认同)

jay*_*ngh 66

这些是直接使用脚本名称的一些先决条件:

  1. she-bang (#!/bin/bash)在最顶部添加行.
  2. 使用chmod u+x scriptnamemake脚本可执行.
  3. 将脚本放在scriptname文件夹下.
  4. 仅使用脚本名称运行脚本.

注意:我建议将其放在/usr/local/bin文件夹下的原因是因为很可能会将路径添加到您的文件夹中/usr/local/bin.

更新:

如果您无权访问该PATH variable文件夹,请执行以下操作:

  1. 在主目录中创建一个文件夹,然后调用它/usr/local/bin.
  2. 不要myscripts在你的主目录,以确定您的外壳也使用启动脚本.它应该是ls -lart.profile.
  3. 确定启动脚本后,在脚本中添加以下行 - .bashrc.
  4. 添加后,请提供启动脚本或注销并重新登录.
  5. 使用脚本名称执行脚本.


zie*_*mer 20

只需确保它是可执行的,使用chmod +x.默认情况下,当前目录不在PATH上,因此您需要将其作为./script.sh- 或以合格路径引用它来执行.或者,如果您真的需要,则需要script.sh将其添加到PATH中.(您可能无权修改系统路径,但几乎可以肯定地修改您当前环境的PATH.)这也假设您的脚本以类似的方式开头#!/bin/sh.

你还可以使用一个别名,它与shell脚本无关,只与shell有关,而且很简单:

alias script.sh='sh script.sh'
Run Code Online (Sandbox Code Playgroud)

这将允许你只使用script.sh(字面意思 - 这不适用于任何其他*.sh文件)而不是sh script.sh.


小智 15

在此示例中,将调用该文件 myShell

首先,我们需要创建这个文件,我们可以通过键入以下内容开始:

sudo nano myShell
Run Code Online (Sandbox Code Playgroud)

注意我们没有放.sh延期?那是因为当我们从终端运行它时,我们只需要键入myShell以运行我们的命令!

现在,在纳米线的顶线必须是#!/bin/bash你可以在继续之前留下一条新线.

为了演示,我将添加一个基本Hello World!响应

所以,我键入以下内容:

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

之后,我的示例应如下所示:

#!/bin/bash
echo Hello World!
Run Code Online (Sandbox Code Playgroud)

现在保存文件,然后运行此命令:

sudo chmod +x myShell
Run Code Online (Sandbox Code Playgroud)

现在我们已经使文件可执行,我们可以/usr/bin/使用以下命令将其移动到:

sudo cp myShell /usr/bin/
Run Code Online (Sandbox Code Playgroud)

只是为了确保机器能够正确执行它,我们需要重启机器

我用了 sudo shutdown -r now

恭喜!我们的命令现在完成了!在终端,我们可以打字myShell,它应该说Hello World!

  • 你不应该把你自己的文件放在 `/usr/bin` 中 - 许多系统为此目的而保留 `/usr/local/bin` 并严格为操作系统保留 `/usr/bin`。 (2认同)

Uku*_*kit 13

您必须为该程序启用可执行位.

chmod +x script.sh
Run Code Online (Sandbox Code Playgroud)

然后你可以使用 ./script.sh

您可以将文件夹添加到文件中的PATH .bashrc(位于主目录中).将此行添加到文件末尾:

export PATH=$PATH:/your/folder/here
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以键入sudo install(脚本名称)/ usr/local/bin /(要键入以执行所述脚本的内容)

例如:sudo install quickcommit.sh /usr/local/bin/quickcommit 输入密码

现在可以在没有.sh和任何目录的情况下运行