2012-06-05 48 views
11

如何我指的是当前目录中的shell脚本参考当前目录中的shell脚本

所以我有这个脚本调用在同一个目录

#! /bin/sh 

#Call the other script 
./foo.sh 

# do something ... 

另一个脚本对于此我./foo.sh: No such file or directory

所以我把它改为:

#! /bin/sh 

#Call the other script 
foo.sh 

# do something ... 

但是这会调用foo脚本,默认情况下,该脚本位于PATH中。这不是我想要的。

所以问题是,在shell脚本中做'./`的语法是什么?

+1

'。/'表示当前工作目录_,而不是存储当前正在执行的脚本文件_的目录。我不确定任何机制来获取包含当前正在执行的脚本的目录。但是如果你的第一个脚本在'PATH'中,那么第二个脚本也是如此...... – sarnold

回答

18

如果两个脚本都在同一个目录中,并且出现了./foo.sh: No such file or directory错误,那么最可能的原因是您从不同目录运行第一个脚本,而不是它们所在的目录。将以下内容放入第一个脚本脚本,以便调用foo.sh作品无论在那里你调用从第一个剧本:

my_dir=`dirname $0` 
#Call the other script 
$my_dir/foo.sh 
+0

很棒!谢谢 –

+0

如何处理目录名称中的空格?它会引发错误 – roosevelt

+0

该目录的完整路径为'$ PWD/$ my_dir' –

0

如果路径中有包含脚本的目录的空间接受的解决方案不起作用。

如果你可以使用bash,这个工作对我来说:

#!/bin/bash 
SCRIPTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 
"${SCRIPTDIR}/foo.sh" 
4

下面的代码与空间效果很好,并不需要bash的工作:如果你想

#!/bin/sh 

SCRIPTDIR="$(dirname "$0")" 

#Call the other script 
"$SCRIPTDIR/foo.sh" 

而且使用绝对路径,你可以这样做:

SCRIPTDIR=`cd "$(dirname "$0")" && pwd`