在shell脚本中引用当前目录
在shell脚本中,经常需要引用当前目录。然而,有时候会遇到一些问题,例如目录名中含有空格,或者需要使用绝对路径。以下是一个关于如何在shell脚本中引用当前目录的问题以及解决方法的介绍。
首先,让我们看一下下面的代码,它可以在目录名中含有空格的情况下正常工作,而且不需要使用bash:
#!/bin/sh SCRIPTDIR="$(dirname "$0")" #调用另一个脚本 "$SCRIPTDIR/foo.sh"
在这段代码中,$(dirname "$0")
用来获取当前脚本的所在目录的路径。然后,通过$SCRIPTDIR
变量来引用这个路径,并调用另一个脚本。
另外,如果你想使用绝对路径,可以使用下面的代码:
SCRIPTDIR=`cd "$(dirname "$0")" && pwd`
这段代码中,cd "$(dirname "$0")"
用来切换到当前脚本所在目录,而pwd
用来获取当前目录的绝对路径。然后,通过$SCRIPTDIR
变量来引用这个路径。
通过以上方法,我们可以方便地在shell脚本中引用当前目录,并且可以处理目录名中含有空格的情况,以及使用绝对路径的需求。
问题:在shell脚本中如何引用当前目录?
出现原因:如果两个脚本位于同一目录下,但是在运行第一个脚本时出现了“./foo.sh: No such file or directory”错误,那么最有可能的原因是你在不同于脚本所在目录的位置运行了第一个脚本。
解决方法:在第一个脚本中添加以下内容,这样调用foo.sh
时无论从哪个位置调用第一个脚本都能正常工作:
my_dir=`dirname $0` #调用另一个脚本 $my_dir/foo.sh
处理目录名称中的空格有什么方法?它会抛出错误。
目录的完整路径是$PWD/$my_dir
。
请注意,对于被“source”引用的脚本,$0
不能按预期工作。对于bash,可以使用BASH_SOURCE
作为$0
的替代方案,它可以按预期工作。