2013-04-17 197 views
0

我在我的一个应用程序文件夹中有一个脚本。通常我只是将cd放入到Unix中的那个locatin中,然后运行脚本,例如在bash中运行脚本

UNIX> cd My\Folder\

My\Folder> MyScript

这将打印所需的结果。

我不知道我该怎么做这猛砸script.I做了以下

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

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

+4

目录分隔符是'/',而不是在* NIX系统\。 –

+0

除非您在触发脚本之前在脚本中执行了其他操作,否则可能需要为脚本提供绝对路径/This/is/My/Folder/Myscript'。 – devnull

回答

2

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

这意味着你可以调用MyScript在脚本就是这样:

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

正如我所说的,./MyScript会更好(不作为暧昧)。请参阅Michael Wild关于目录分隔符的评论。

一般来说,巴什认为不能解决的内置的关键字(如ifwhiledo等)的一切,在位于您的路径某处的可执行文件或脚本(*)的调用。它会依次检查PATH中的每个目录是否存在一个命名为可执行文件的脚本,并执行找到的第一个目录(可能是或可能不是您打算运行的MyScript)。这就是为什么指定你的意思是MyScript这个目录(./)是更好的选择。

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

1

我宁愿把名字放在引号中。这使得阅读和避免错误更容易。

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

您的昵称说,这一切;-)

当不包含/,猛砸首先检查是否是一个别名或功能的提示输入的命令。然后它检查它是否是内置命令,然后才开始在PATH上搜索。这是一个包含要搜索命令的目录列表的shell变量。看起来你的情况.(即当前目录)在PATH,这通常被认为是一个非常糟糕的主意。

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

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

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

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

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