在bash中运行脚本

时间:2013-04-17 06:27:29

标签: perl bash shell

我的一个应用程序文件夹中有一个脚本。通常我只是cd进入Unix框中的locatin并运行脚本,例如。

UNIX> cd My\Folder\

My\Folder> MyScript

这将打印所需的结果。

我不知道如何在Bash脚本中执行此操作。我已完成以下操作

#!/bin/bash
mydir=My\Folder\
cd $mydir
echo $(pwd)

这基本上将我放在正确的文件夹中以运行所需的脚本。但我不确定如何在代码中运行脚本?

4 个答案:

答案 0 :(得分:2)

如果你可以调用MyScript(而不是./MyScript),显然当前目录(“。”)是你的PATH的一部分。 (顺便说一句,这不是一个好主意。)

这意味着您可以在脚本中调用MyScript

#!/bin/bash
mydir=My/Folder/
cd $mydir
echo $(pwd)
MyScript

正如我所说,./MyScript会更好(不是含糊不清)。请参阅Michael Wild关于目录分隔符的评论。

一般来说,Bash会将无法解析的所有内容(例如ifwhiledo等)视为对可执行文件或脚本的调用(*)位于PATH的某个地方。它将依次检查PATH中的每个目录是否有所谓的可执行文件/脚本,并执行它找到的第一个目录(可能是或者可能不是你想要运行的MyScript)。这就是为什么指明你的意思是这个目录中的MyScript./)是更好的选择。

(*):当然,除非定义了该名称的功能。

答案 1 :(得分:2)

#!/bin/bash
mydir=My/Folder/
cd $mydir
echo $(pwd)
MyScript

答案 2 :(得分:1)

我宁愿把名字放在引号中。这样可以更容易阅读并防止错误。

#!/bin/bash
mydir="My Folder"
cd "$mydir"
echo $(pwd)
./MyScript

答案 3 :(得分:1)

你的昵称说明了一切; - )

当在不包含/的提示符处输入命令时,Bash首先检查它是别名还是函数。然后它检查它是否是内置命令,然后才开始在PATH上搜索。这是一个shell变量,包含要搜索命令的目录列表。在您的情况下,.(即当前目录)似乎位于PATH,这通常被认为是一个非常糟糕的主意。

如果该命令包含/,则不会执行PATH中的查找。相反,需要完全匹配。如果以/开头,则它是绝对路径,并且该文件必须存在。否则它是相对路径,文件必须相对于当前工作目录存在。

所以,你有两个可以接受的选择:

  1. 将您的脚本放在PATH上的某个目录中。或者,将包含脚本的目录添加到PATH变量。

  2. 使用绝对路径或相对路径来调用脚本。