![unix中的bash脚本-返回完整路径和文件名](https://linux22.com/image/526304/unix%E4%B8%AD%E7%9A%84bash%E8%84%9A%E6%9C%AC-%E8%BF%94%E5%9B%9E%E5%AE%8C%E6%95%B4%E8%B7%AF%E5%BE%84%E5%92%8C%E6%96%87%E4%BB%B6%E5%90%8D.png)
我想在 unix 中设计 bash 脚本,并且这个 bash 返回完整路径,因为我想在其他地方使用这个文件。
答案1
您是否正在寻找正在运行的脚本的完整路径和文件名?
#!/bin/bash
我的名字=basename $0
如果 [“ echo $0 | cut -c1
”=“/”];则
_my_path=`dirname $0`
别的
_my_path=`pwd`/`echo $0 | sed -e s/$_my_name//`
菲
echo "文件名:$_my_name"
echo "绝对路径:$_my_path"
echo "完整路径+名称:$0"
答案2
readlink
如果你的系统上有以下配置,可以尝试一下:
readlink -e filename
答案3
由于这个问题不是尝试回答将带有符号链接的路径转换为物理路径(不含任何链接)这个更难的问题,而是仅获取目录和/或原始脚本的完整路径,有一个更简单的解决方案(在此示例中分解为多个部分以便于阅读,另外您可能希望单独使用其中任何一个部分):
#!/bin/bash
PROG_PATH=${BASH_SOURCE[0]} # this script's name
PROG_NAME=${PROG_PATH##*/} # basename of script (strip path)
PROG_DIR=$(cd "$(dirname "${PROG_PATH:-$PWD}")" 2>/dev/null 1>&2 && pwd)
echo "script directory is: $PROG_DIR"
您的测试用例应该涉及使用绝对路径、相对路径调用该脚本、“获取”它等,并且始终以包含该脚本的目录结束。