Linux/Unix:Shell脚本找出目录脚本文件所在的位置
时间:2020-01-09 10:42:23 来源:igfitidea点击:
如何找出我的bash脚本所在的目录,以便读取名为.backup .ignore .target的配置文件。
例如,如果我的脚本位于>/home/foo/script.sh
中,则需要读取/home/foo/.{backup,ignore,target}
文件。
如何在Linux或者Unix等操作系统上运行的Bash中找出当前目录位置和Shell脚本目录位置?
您可以使用以下任何一种方法来查找路径名的一部分:
- basename命令显示路径名的文件名部分。
- dirname命令显示路径名的目录部分。
- Bash参数替换。
- $0扩展为shell或者shell脚本的名称。示例:Shell脚本找出脚本文件所在的目录以下示例显示目录路径或者/home/theitroad/scripts/foo.sh的一部分:
dirname /home/theitroad/scripts/foo.sh
以下行将shell变量i设置为/home/theitroad/scripts:
i=`dirname /home/theitroad/scripts/foo.sh` echo "$i"
或者
i=$(dirname /home/theitroad/scripts/foo.sh) echo "$i"
在bash脚本中使用$0代替/home/theitroad/scripts/foo.sh:
#!/bin/bash script="Script name /tmp/test.sh resides in /tmp directory." basename="$(dirname $script)" echo "Script name $script resides in $basename directory."
输出示例:
var=${path%/*}
使用bash shell ${var%pattern}语法要从最短的后部(结束)模式中删除,请使用以下语法:
x="/Users/theitroad/scripts/bar.sh" echo "${x%/*}" y="${x%/*}" echo "$y"
例如:
#!/bin/bash # Purpose : Linux / Unix shell script find out which directory this script file resides # ------------------------------------------------------------------------------------ script="$ chmod +x /tmp/test.sh $ /tmp/test.sh" basename="${script%/*}" config1="${basename}/.backup" config2="${basename}/.ignore" config3="${basename}/.target" echo "Script name $script resides in $basename directory." echo "Reading config file $config1 $config2 $config3, please wait..."
上面脚本的更新版本:
#!/bin/bash # Purpose : Linux / Unix shell script find out which directory this script file resides # Author : theitroad <http://www.theitroad.local> under GPL v2.x+ # ------------------------------------------------------------------------------------ ## Who am i? ## ## Get real path ## _script="$(readlink -f ${BASH_SOURCE[0]})" ## Delete last component from $_script ## _mydir="$(dirname $_script)" ## Delete /path/to/dir/ component from $_script ## _myfile="$(basename $_script)" echo "Script : $_script" echo "Directory portion of $_script : $_mydir" echo "Filename portion of $_script : $_myfile"
运行:
./demo.bash cd /home/Hyman/ ../../tmp/demo.bash /tmp/demo.bash
有关查找物理路径或者真实路径的说明
您可能无法获得真实的物理路径,并且真实路径可能是符号链接。要获取物理路径,请使用realpath命令。 realpath命令使用realpath()函数来解析路径中的所有符号链接,多余的/字符以及对/./和/../的引用。这对于Shell脚本和与安全性相关的应用程序很有用。另一个推荐的选项是使用readlink命令显示符号链接或者规范文件名的值:
##代码##保存并关闭文件。运行:
##代码##