You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MacOS终端中通过脚本运行文件时如何获取文件完整路径

MacOS终端中通过脚本运行文件时如何获取文件完整路径

嘿,刚好碰到过类似需求!在macOS的Shell脚本里,想要实现Windows批处理中set path=%~dp1%~nx1的效果,获取传入文件的完整绝对路径,有几种实用的方法,我给你详细说说:

方法1:用realpath命令(推荐,简单直接)

如果你的macOS版本是10.13及以上,系统默认自带realpath命令,它可以直接把相对路径或文件名转换成完整的绝对路径。在脚本里这么写就行:

# 把传入的第一个文件参数转成完整路径,存到full_path变量里
full_path=$(realpath "$1")

比如你运行./your_script.sh test.txt,不管test.txt在当前目录还是其他地方,full_path都会存储它的完整绝对路径(比如/Users/yourname/Documents/test.txt)。

方法2:兼容旧版系统的手动拼接方式

要是你的系统比较老,没有realpath,可以用目录定位+文件名拼接的方式,原理和Windows批处理拆分路径的思路类似:

# 先获取文件所在目录的绝对路径
file_dir=$(cd "$(dirname "$1")" && pwd)
# 再获取文件名(带扩展名)
file_name="${1##*/}"
# 拼接成完整路径
full_path="$file_dir/$file_name"

这里dirname "$1"用来提取文件的目录部分,cd到该目录后用pwd拿到绝对路径;${1##*/}是Shell的参数扩展,用来提取最后一个/后面的文件名部分,和Windows里的%~nx1作用一样。

举个完整的脚本例子

把上面的逻辑写成完整脚本,还能加个参数检查,避免用户没传文件:

#!/bin/bash

# 检查是否传入了文件参数
if [ -z "$1" ]; then
    echo "请传入一个文件作为参数哦!比如:./your_script.sh your_file.txt"
    exit 1
fi

# 用realpath获取完整路径
full_path=$(realpath "$1")
echo "文件的完整路径是:$full_path"

这样就能完美替代Windows批处理里的那条命令啦,把刚打开的文件完整路径存到变量里,后续想用直接调用$full_path就行~

备注:内容来源于stack exchange,提问作者David Kohout

火山引擎 最新活动