我在我的一个应用程序文件夹中有一个脚本。通常我只是将cd
放入到Unix中的那个locatin中,然后运行脚本,例如在bash中运行脚本
UNIX> cd My\Folder\
My\Folder> MyScript
这将打印所需的结果。
我不知道我该怎么做这猛砸script.I做了以下
#!/bin/bash
mydir=My\Folder\
cd $mydir
echo $(pwd)
这基本上使我在正确的文件夹中运行所需的脚本。但我不知道如何在代码中运行脚本?
我在我的一个应用程序文件夹中有一个脚本。通常我只是将cd
放入到Unix中的那个locatin中,然后运行脚本,例如在bash中运行脚本
UNIX> cd My\Folder\
My\Folder> MyScript
这将打印所需的结果。
我不知道我该怎么做这猛砸script.I做了以下
#!/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关于目录分隔符的评论。
一般来说,巴什认为不能解决的内置的关键字(如if
,while
,do
等)的一切,在位于您的路径某处的可执行文件或脚本(*)的调用。它会依次检查PATH中的每个目录是否存在一个命名为可执行文件的脚本,并执行找到的第一个目录(可能是或可能不是您打算运行的MyScript
)。这就是为什么指定你的意思是MyScript
这个目录(./
)是更好的选择。
(*):当然,除非定义了该名称的功能。
我宁愿把名字放在引号中。这使得阅读和避免错误更容易。
#!/bin/bash
mydir="My Folder"
cd "$mydir"
echo $(pwd)
./MyScript
您的昵称说,这一切;-)
当不包含/
,猛砸首先检查是否是一个别名或功能的提示输入的命令。然后它检查它是否是内置命令,然后才开始在PATH
上搜索。这是一个包含要搜索命令的目录列表的shell变量。看起来你的情况.
(即当前目录)在PATH
,这通常被认为是一个非常糟糕的主意。
如果该命令包含/
,则不执行PATH
中的查找。相反,需要完全匹配。如果从/
开始,它是绝对路径,并且该文件必须存在。否则它是一个相对路径,并且该文件必须相对于当前工作目录存在。
所以,你有两个可接受的选择:
把你的脚本在某些目录上您PATH
。或者,将包含脚本的目录添加到变量PATH
。
使用绝对路径或相对路径来调用脚本。
#!/bin/bash
mydir=My/Folder/
cd $mydir
echo $(pwd)
MyScript
目录分隔符是'/',而不是在* NIX系统\。 –
除非您在触发脚本之前在脚本中执行了其他操作,否则可能需要为脚本提供绝对路径 path/to/interpreter >/This/is/My/Folder/Myscript'。 – devnull