获取正在执行 Shell 脚本的绝对路径 |
您所在的位置:网站首页 › shell中readlink › 获取正在执行 Shell 脚本的绝对路径 |
背景
在使用 Shell 脚本的过程中,经常有获取脚本位置的需求,比如操作与脚本相对位置的资源。但是在实际获取时存在各种问题,网上的资料也常常有所偏颇,比如: 执行方式不同带来的差异,如通过当前 Shell 来执行,即以 source 脚本文件 或 . 脚本文件 的方式执行,导致不能以 $0 来获取 pwd 命令只能获取当前工作路径,跟脚本位置无关 一些通过改变当前路径的方式,会导致影响执行环境,不理想 操作系统的差异,如:macOS 或 Linux本文的方法适用于 bash、sh 两种 Shell。 解决方案 # 获取 Bash 脚本所在目录绝对路径 SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) readonly SCRIPT_DIR # 获取 Bash 脚本文件完整绝对路径 SCRIPT_FILE=$SCRIPT_DIR/$(basename "${BASH_SOURCE[0]}") readonly SCRIPT_FILE # 测试 echo "${BASH_SOURCE[0]}" echo "$SCRIPT_DIR" echo "$SCRIPT_FILE" 备选方案Linux 系统通过 readlink 来获取脚本文件完整路径,但是 macOS 系统的 readlink 没有 -f 参数,所以也可以通过 brew install coreutils 安装 greadlink 的方式解决。 参考资料解决MacOS下readlink: illegal option -- f The Right Way to Get the Directory of a bash Script How to Get Bash Script’s Own Path How to get script name, script path within the bash script in Linux (完) |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |