如何将当前工作目录设置为脚本目录?

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

默认行为是脚本中的当前工作目录是运行它的外壳程序的目录,但是我不希望出现这种情况。


繁花不似锦
浏览 764回答 3
3回答

Smart猫小萌

#!/bin/bashcd "$(dirname "$0")"

至尊宝的传说

以下内容也适用:cd "${0%/*}"

慕尼黑5688855

尝试以下简单的一线:对于所有UNIX / OSX / Linuxdir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)重击dir=$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)注意:命令中使用双破折号(-)表示命令选项的结尾,因此包含破折号或其他特殊字符的文件不会破坏命令。注意:在Bash中,请使用${BASH_SOURCE[0]},以代替,$0否则在采购(source/ .)时路径可能会中断。对于Linux,Mac和其他* BSD:cd "$(dirname "$(realpath "$0")")";注意:realpath默认情况下,应将其安装在最受欢迎的Linux发行版中(例如Ubuntu),但是某些情况下可能会丢失,因此必须进行安装。注意:如果您使用的是Bash,请使用${BASH_SOURCE[0]}代替$0,否则在采购(source/ .)时路径可能会中断。否则,您可以尝试类似的方法(它将使用第一个现有工具):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中,您可以使用Parameter Expansions来实现,例如:cd "${0%/*}"但是如果脚本是从同一目录运行的,则无法使用。另外,您可以在bash中定义以下函数:realpath () {  [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"}此函数有1个参数。如果参数已经具有绝对路径,则按原样打印,否则打印$PWD变量+文件名参数(不带./前缀)。或以下是从Debian .bashrc文件中获取的版本:function realpath(){    f=$@    if [ -d "$f" ]; then        base=""        dir="$f"    else        base="/$(basename "$f")"        dir=$(dirname "$f")    fi    dir=$(cd "$dir" && /bin/pwd)    echo "$dir$base"}
打开App,查看更多内容
随时随地看视频慕课网APP