我的一个应用程序文件夹中有一个脚本。通常我只是cd
进入 Unix 框中的那个位置并运行脚本,例如
UNIX> cd My\Folder\
My\Folder> MyScript
这将打印所需的结果。
我不确定如何在 Bash 脚本中执行此操作。我已完成以下操作
#!/bin/bash
mydir=My\Folder\
cd $mydir
echo $(pwd)
这基本上使我在正确的文件夹中运行所需的脚本。但我不确定如何在代码中运行脚本?
如果您可以调用MyScript
(而不是./MyScript
),显然当前目录(“.”)是您的 PATH 的一部分。(顺便说一句,这不是一个好主意。)
这意味着您可以MyScript
像这样调用脚本:
#!/bin/bash
mydir=My/Folder/
cd $mydir
echo $(pwd)
MyScript
正如我所说,./MyScript
会更好(不是模棱两可)。请参阅 Michael Wild 关于目录分隔符的评论。
一般来说,Bash 将无法解析为内置关键字(如 、 等)的所有内容if
视为while
对do
位于 PATH 中某处的可执行文件或脚本 (*) 的调用。它将依次检查 PATH 中的每个目录以查找所谓的可执行文件/脚本,并执行它找到的第一个(可能是也可能不是MyScript
您打算运行的)。这就是为什么指定您的意思是此目录中的非常MyScript
( )是./
更好的选择。
(*):当然,除非定义了该名称的函数。
#!/bin/bash
mydir=My/Folder/
cd $mydir
echo $(pwd)
MyScript
你的昵称说明了一切;-)
当在提示符处输入不包含 a 的命令时/
,Bash 首先检查它是别名还是函数。然后它检查它是否是一个内置命令,然后才开始在PATH
. 这是一个 shell 变量,其中包含用于搜索命令的目录列表。.
在您的情况下(即当前目录)似乎在中PATH
,这通常被认为是一个非常糟糕的主意。
如果命令包含 a /
,则不执行在 中的查找PATH
。相反,需要完全匹配。如果以 a 开头,/
则为绝对路径,并且该文件必须存在。否则它是一个相对路径,并且该文件必须相对于当前工作目录存在。
因此,您有两个可接受的选择:
将您的脚本放在您的PATH
. 或者,将包含脚本的目录添加到PATH
变量中。
使用绝对或相对路径来调用您的脚本。
我宁愿把名字放在引号里。这使得阅读和保存以防止错误更容易。
#!/bin/bash
mydir="My Folder"
cd "$mydir"
echo $(pwd)
./MyScript