bash - current - shell get script full path




如何将当前工作目录设置为脚本的目录? (7)

以下内容也有效:

cd "${0%/*}"

this StackOverflow答案中详细描述了语法。

我在写一个bash脚本。 我需要当前的工作目录始终是脚本所在的目录。

默认行为是脚本中的当前工作目录是我从中运行它的shell的工作目录,但我不想要这种行为。


如果你只需要打印当前工作目录,那么你可以按照这个。

$ vim test

#!/bin/bash
pwd
:wq to save the test file.

给予执行权限:

chmod u+x test

然后通过./test执行脚本,然后你可以看到当前的工作目录。


试试以下简单的一行:

适用于所有UNIX / OSX / Linux

dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)

注意:在命令中使用双短划线( - )来表示命令选项的结束,因此包含破折号或其他特殊字符的文件不会破坏命令。

对于Linux,Mac和其他* BSD:

cd $(dirname $(realpath $0))

使用空格支持:

cd "$(dirname "$(realpath "$0")")";

注意: realpath应该默认安装在最流行的Linux发行版中(比如Ubuntu),但在某些情况下它可能会丢失,因此您必须安装它。

否则,你可以尝试类似的东西(它会使用第一个现有的工具):

cd $(dirname $(readlink -f $0 || realpath $0))

对于Linux特定的:

cd $(dirname $(readlink -f $0))

在* BSD / Mac上使用GNU readlink:

cd $(dirname $(greadlink -f $0))

注意:您需要安装coreutils (例如1.安装Homebrew ,2. brew install coreutils )。

在bash中

在bash中,您可以使用Parameter Expansions来实现该功能,如:

cd ${0%/*}

但如果脚本是从同一个目录运行的,则它不起作用。

或者,您可以在bash中定义以下函数:

realpath () {
  [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
}

该函数需要1个参数。 如果参数已经有绝对路径,按原样打印它,否则打​​印$PWD变量+文件名参数(不带./前缀)。

或者这里是从Debian .bashrc文件中取得的版本:

function realpath()
{
    [email protected]
    if [ -d "$f" ]; then
        base=""
        dir="$f"
    else
        base="/$(basename "$f")"
        dir=$(dirname "$f")
    fi
    dir=$(cd "$dir" && /bin/pwd)
    echo "$dir$base"
}

有关:

也可以看看:

如何在Mac上获得GNU的readlink -f的行为?


这个脚本似乎适用于我:

#!/bin/bash
mypath=`realpath $0`
cd `dirname $mypath`
pwd

无论我从哪里运行,pwd命令行都会将脚本的位置作为当前工作目录回显。


cd "$(dirname ${BASH_SOURCE[0]})"

这很容易。 有用。


cd "`dirname $(readlink -f ${0})`"

echo $PWD | rev | cut -d'/' -f1 | rev






cwd