Perl 在bash中运行脚本

Perl 在bash中运行脚本,perl,bash,shell,Perl,Bash,Shell,我的一个应用程序文件夹中有一个脚本。通常我只是将cd放入Unix框中的该位置,然后运行脚本,例如 UNIX>cd我的文件夹\ My\Folder>MyScript 这将打印所需的结果 我不知道如何在Bash脚本中实现这一点 #!/bin/bash mydir=My\Folder\ cd $mydir echo $(pwd) 这基本上把我放在正确的文件夹中运行所需的脚本。但是我不知道如何在代码中运行脚本?如果您可以调用MyScript(与/MyScript相反),显然当前目录(“.”)是您路径的

我的一个应用程序文件夹中有一个脚本。通常我只是将
cd
放入Unix框中的该位置,然后运行脚本,例如

UNIX>cd我的文件夹\

My\Folder>MyScript

这将打印所需的结果

我不知道如何在Bash脚本中实现这一点

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

这基本上把我放在正确的文件夹中运行所需的脚本。但是我不知道如何在代码中运行脚本?

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

这意味着您可以在脚本中调用
MyScript
,如下所示:

#!/bin/bash
mydir=My/Folder/
cd $mydir
echo $(pwd)
MyScript
正如我所说,
/MyScript
会更好(不是那么模棱两可)。请参阅Michael Wild关于目录分隔符的评论

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


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

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

这意味着您可以在脚本中调用
MyScript
,如下所示:

#!/bin/bash
mydir=My/Folder/
cd $mydir
echo $(pwd)
MyScript
正如我所说,
/MyScript
会更好(不是那么模棱两可)。请参阅Michael Wild关于目录分隔符的评论

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


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

我宁愿将该名称放在引号中。这使它更容易阅读和保存,以防出错

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

我宁愿把这个名字用引号引起来。这使它更容易阅读和保存,以防出错

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

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

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

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

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

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

  • 使用绝对或相对路径来调用脚本


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

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

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

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

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

  • 使用绝对或相对路径来调用脚本


  • 目录分隔符是
    /
    ,而不是*NIX系统上的。除非您在触发脚本之前在脚本中执行了
    cd
    以外的操作(上面的代码片段似乎就是这种情况),您可能希望提供脚本
    /This/is/My/Folder/Myscript
    的绝对路径。目录分隔符是
    /
    ,而不是*NIX系统上的。除非您在触发脚本之前在脚本中执行
    cd
    以外的操作(从上面的代码段来看,情况似乎是这样的),您可能希望提供脚本的绝对路径
    /This/is/My/Folder/Myscript