在shell脚本中引用当前目录
如何在shell脚本中引用当前目录 我有一个脚本,它调用同一目录中的另一个脚本:在shell脚本中引用当前目录,shell,Shell,如何在shell脚本中引用当前目录 我有一个脚本,它调用同一目录中的另一个脚本: #! /bin/sh #Call the other script ./foo.sh # do something ... 为此,我得到了/foo.sh:没有这样的文件或目录 所以我把它改成: #! /bin/sh #Call the other script foo.sh # do something ... 但是这将调用foo脚本,默认情况下,该脚本位于路径中。这不是我想要的 所以问题是,she
#! /bin/sh
#Call the other script
./foo.sh
# do something ...
为此,我得到了/foo.sh:没有这样的文件或目录
所以我把它改成:
#! /bin/sh
#Call the other script
foo.sh
# do something ...
但是这将调用foo
脚本,默认情况下,该脚本位于路径中。这不是我想要的
所以问题是,shell脚本中的/
语法是什么?这可能会帮助您:
但是正如sarnold所说,“./”是指当前正在工作的目录。如果两个脚本都在同一目录中,并且您得到了
/foo.sh:没有这样的文件或目录
错误,那么最有可能的原因是您从不同于它们所在目录的目录运行了第一个脚本。在第一个脚本中添加以下内容,以便无论从何处调用第一个脚本,对foo.sh
的调用都能正常工作:
my_dir=`dirname $0`
#Call the other script
$my_dir/foo.sh
如果指向包含脚本的目录的路径中有空格,则接受的解决方案不起作用 如果您可以使用bash,这对我很有用:
#!/bin/bash
SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
"${SCRIPTDIR}/foo.sh"
以下代码适用于空格,不需要bash即可工作:
#!/bin/sh
SCRIPTDIR="$(dirname "$0")"
#Call the other script
"$SCRIPTDIR/foo.sh"
此外,如果要使用绝对路径,可以执行以下操作:
SCRIPTDIR=`cd "$(dirname "$0")" && pwd`
为了使其成为POSIX:
a="/$0"; a=${a%/*}; a=${a:-.}; a=${a#/}/; BASEDIR=$(cd $a; pwd)
在许多Bourne兼容的外壳上测试,包括BSD外壳
据我所知,我是作者,我把它公之于众。有关更多信息,请参阅:
script_dir=“${BASH_SOURCE%/*}”#rm BASH_SOURCE的最后一个/和文件名
$script\u dir/foo.sh
参考:Alex Che的上述评论
/
表示当前工作目录,而不是存储当前正在执行的脚本文件的目录。我不确定是否有任何机制可以获取包含当前正在执行的脚本的目录。但是如果您的第一个脚本在路径中,那么第二个脚本也是如此……您如何处理目录名中的空格?它抛出一个错误目录的完整路径是$PWD/$my_dir
,请注意,$0
将无法按预期使用源脚本。对于bash,有一个$0
的替代方案,它可以按预期工作。