![查看所有 Bash/Shell 脚本相关的常见问题解答](https://www.alaica.com/wp-content/uploads/linux-92.png)
如何找到 bash shell 脚本所在目录的路径并将该路径存储在 _base 变量中?
您需要使用以下组合:
[a] readlink– 显示符号链接或规范文件名的值。
教程详情 | |
---|---|
难度级别 | 简单的 |
根权限 | 不 |
要求 | 类 Unix+ bash |
美东时间。阅读时间 | 2分钟 |
这是获取符号链接目标的安全方法。
[b]${BASH_SOURCE[0]}或$0– shell 脚本文件的名称存储在 $0 或 ${BASH_SOURCE[0]} 中
请注意,以下示例仅在 Debian Linux 上运行的 Bash shell 上进行测试。此代码可能不可移植,并且可能会在其他 Linux 发行版/类 Unix 操作系统上崩溃。
例子
创建一个shell脚本如下:
#!/bin/bash # 名称:/tmp/demo.bash : # 目的:告诉 $0 存储在哪个目录中 # 警告:未测试可移植性 # -------------- --------------------------------- ## 我是谁?## _script = " $(readlink -f ${BASH_SOURCE[0]}) " ## 从 $_script 中删除最后一个组件 ## _base = " $(dirname $_script) " ## 好的,打印出来 ## echo "脚本名称 : $_script " echo "当前工作目录 : $PWD " echo "脚本位置路径 (dir) : $_base "
保存并关闭文件。按如下方式运行:
示例输出:
$ chmod +x /tmp/demo.bash
$ /tmp/demo.bash
脚本名称:/tmp/demo.bash 当前工作目录:/home/vivek 脚本位置路径(dir):/tmp
cd 到 /home/vivek
示例输出:
$ cd ~
$ /tmp/demo.bash
脚本名称:/tmp/demo.bash 当前工作目录:/home/vivek 脚本位置路径(dir):/tmp
按如下方式运行:
$ ../../tmp/demo.bash
示例输出:
脚本名称:/tmp/demo.bash 当前工作目录:/home/vivek 脚本位置路径(dir):/tmp
最后,在 /home/vivek 中创建一个符号链接并测试它:
示例输出:
$ cd ~
$ ln -s /tmp/demo.bash
$ ./demo.bash
$ rm demo.bash
脚本名称:/tmp/demo.bash 当前工作目录:/home/vivek 脚本位置路径(dir):/tmp
知道解决这个问题的更好方法吗?添加在下面的评论中。