如何在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脚本中引用./
的语法是什么?
答案 0 :(得分:19)
如果两个脚本都在同一个目录中并且出现./foo.sh: No such file or directory
错误,那么最可能的原因是您从不同目录运行第一个脚本而不是它们所在的目录。放置以下内容在您的第一个脚本中,无论您从哪里调用第一个脚本,都可以调用foo.sh
:
my_dir=`dirname $0`
#Call the other script
$my_dir/foo.sh
答案 1 :(得分:4)
以下代码适用于空格,并且不需要使用bash:
#!/bin/sh
SCRIPTDIR="$(dirname "$0")"
#Call the other script
"$SCRIPTDIR/foo.sh"
另外,如果你想使用绝对路径,你可以这样做:
SCRIPTDIR=`cd "$(dirname "$0")" && pwd`
答案 2 :(得分:1)
这可能对您有所帮助: Unix shell script find out which directory the script file resides?
但正如sarnold所说,“。/”适用于当前正常工作目录。
答案 3 :(得分:0)
如果在包含脚本的目录的路径中有空格,则接受的解决方案不起作用。
如果你可以使用bash,这对我有用:
#!/bin/bash
SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
"${SCRIPTDIR}/foo.sh"
答案 4 :(得分:0)
script_dir="${BASH_SOURCE%/*}" # rm the last / and the file name from BASH_SOURCE
$script_dir/foo.sh
参考:以上是Alex Che的评论。