我的一个应用程序文件夹中有一个脚本。通常我只是cd
进入Unix框中的locatin并运行脚本,例如。
UNIX> cd My\Folder\
My\Folder> MyScript
这将打印所需的结果。
我不知道如何在Bash脚本中执行此操作。我已完成以下操作
#!/bin/bash
mydir=My\Folder\
cd $mydir
echo $(pwd)
这基本上将我放在正确的文件夹中以运行所需的脚本。但我不确定如何在代码中运行脚本?
答案 0 :(得分:2)
如果你可以调用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
(./
)是更好的选择。
(*):当然,除非定义了该名称的功能。
答案 1 :(得分:2)
#!/bin/bash
mydir=My/Folder/
cd $mydir
echo $(pwd)
MyScript
答案 2 :(得分:1)
我宁愿把名字放在引号中。这样可以更容易阅读并防止错误。
#!/bin/bash
mydir="My Folder"
cd "$mydir"
echo $(pwd)
./MyScript
答案 3 :(得分:1)
你的昵称说明了一切; - )
当在不包含/
的提示符处输入命令时,Bash首先检查它是别名还是函数。然后它检查它是否是内置命令,然后才开始在PATH
上搜索。这是一个shell变量,包含要搜索命令的目录列表。在您的情况下,.
(即当前目录)似乎位于PATH
,这通常被认为是一个非常糟糕的主意。
如果该命令包含/
,则不会执行PATH
中的查找。相反,需要完全匹配。如果以/
开头,则它是绝对路径,并且该文件必须存在。否则它是相对路径,文件必须相对于当前工作目录存在。
所以,你有两个可以接受的选择:
将您的脚本放在PATH
上的某个目录中。或者,将包含脚本的目录添加到PATH
变量。
使用绝对路径或相对路径来调用脚本。