0

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

UNIX> cd My\Folder\

My\Folder> MyScript

这将打印所需的结果。

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

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

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

4

4 回答 4

2

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

这意味着您可以MyScript像这样调用脚本:

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

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

一般来说,Bash 将无法解析为内置关键字(如 、 等)的所有内容if视为whiledo位于 PATH 中某处的可执行文件或脚本 (*) 的调用。它将依次检查 PATH 中的每个目录以查找所谓的可执行文件/脚本,并执行它找到的第一个(可能是也可能不是MyScript您打算运行的)。这就是为什么指定您的意思是此目录中的非常MyScript( )./更好的选择。

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

于 2013-04-17T06:33:40.503 回答
2
#!/bin/bash
mydir=My/Folder/
cd $mydir
echo $(pwd)
MyScript
于 2013-04-17T06:44:03.513 回答
1

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

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

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

因此,您有两个可接受的选择:

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

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

于 2013-04-17T06:38:51.790 回答
1

我宁愿把名字放在引号里。这使得阅读和保存以防止错误更容易。

#!/bin/bash
mydir="My Folder"
cd "$mydir"
echo $(pwd)
./MyScript
于 2013-04-17T06:37:06.070 回答