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

尝试以下简单的一线:

对于所有UNIX / OSX / Linux

dir=$(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"

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值