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

尝试以下简单的单行:

适用于所有UNIX / OSX / Linux

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

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

对于Linux,Mac和其他* BSD:

cd $(dirname $(realpath $0))

白色空间支持:

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

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

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

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

对于Linux特定:

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

在* BSD / Mac上使用GNU readlink:

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

注意:您需要安装.bashrc(例如1.安装Homebrew,2。./)。

在bash中

在bash中,您可以使用参数扩展来实现这一点,例如:

cd ${0%/*}

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

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

realpath () {

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

}

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

或者这里是从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"

}

有关:

如何检测我运行shell脚本的当前目录?

从内部获取Bash脚本的源目录

使用OSX的Bash脚本绝对路径

bash脚本可靠的方式获得自己的完整路径?

也可以看看:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值