Bash脚本:了解在Unix或者Linux下存储在什么目录脚本中

时间:2020-01-09 10:45:52  来源:igfitidea点击:

如何找到bash shell脚本所在目录的路径并将该路径存储在_base变量中?您需要使用以下各项的组合:

  • readlink显示符号链接或者规范文件名的值。

这是获取符号链接目标的安全方法。

  • ${BASH_SOURCE [0]}或者$0

Shell脚本文件的名称存储在$0或者${BASH_SOURCE [0]}中

请注意,以下示例仅在Debian Linux上运行的Bash shell上进行了测试。
此代码可能无法移植,并且可能在其他Linux发行版/Unix等操作系统上中断。

例子

创建一个shell脚本,如下所示:

#!/bin/bash
# Name: /tmp/demo.bash : 
# Purpose: Tell in what directory 
$ chmod +x /tmp/demo.bash
$ /tmp/demo.bash
is stored in # Warning: Not tested for portability # -----------------------------------------------   ## who am i? ## _script="$(readlink -f ${BASH_SOURCE[0]})"   ## Delete last component from $_script ## _base="$(dirname $_script)"   ## Okay, print it ## echo "Script name : $_script" echo "Current working dir : $PWD" echo "Script location path (dir) : $_base"

保存并关闭文件。
如下运行:

Script name : /tmp/demo.bash
Current working dir : /home/Hyman
Script location path (dir) : /tmp

输出示例:

$ cd ~
$ /tmp/demo.bash

光盘到/home/Hyman

Script name : /tmp/demo.bash
Current working dir : /home/Hyman
Script location path (dir) : /tmp

输出示例:

$ ../../tmp/demo.bash

如下运行:

Script name : /tmp/demo.bash
Current working dir : /home/Hyman
Script location path (dir) : /tmp

输出示例:

$ cd ~
$ ln -s /tmp/demo.bash
$ ./demo.bash
$ rm demo.bash

最后,在/home/Hyman中创建一个符号链接并对其进行测试:

Script name : /tmp/demo.bash
Current working dir : /home/Hyman
Script location path (dir) : /tmp

输出示例:

##代码##