首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >OS X的Bash脚本绝对路径

OS X的Bash脚本绝对路径
EN

Stack Overflow用户
提问于 2010-08-26 12:24:02
回答 10查看 102.5K关注 0票数 126

我正在尝试获取OS X上当前正在运行的脚本的绝对路径。

我看到很多回复都是关于readlink -f $0的。然而,由于OS的readlink和BSD是一样的,它就是不能工作(它可以与GNU的版本一起工作)。

有没有开箱即用的解决方案?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-08-26 12:42:52

有一个realpath() C函数可以完成这项工作,但我在命令行上看不到任何可用的东西。这里有一个快速而肮脏的替代方案:

代码语言:javascript
复制
#!/bin/bash

realpath() {
    [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
}

realpath "$0"

如果路径以/开头,则会逐字打印该路径。如果不是,它必须是一个相对路径,所以它将$PWD放在前面。#./部件从$1的前面剥离了./

票数 114
EN

Stack Overflow用户

发布于 2017-08-01 00:16:08

Python解决方案的一个命令行更友好的变体:

代码语言:javascript
复制
python -c 'import os, sys; print(os.path.realpath(sys.argv[1]))' ./my/path
票数 14
EN

Stack Overflow用户

发布于 2015-06-12 12:45:33

我正在寻找一种在系统配置脚本中使用的解决方案,即在安装Homebrew之前运行。如果没有合适的解决方案,我只能将任务转移到跨平台语言,例如Perl:

代码语言:javascript
复制
script_abspath=$(perl -e 'use Cwd "abs_path"; print abs_path(@ARGV[0])' -- "$0")

更常见的情况是,我们实际需要的是包含目录:

代码语言:javascript
复制
here=$(perl -e 'use File::Basename; use Cwd "abs_path"; print dirname(abs_path(@ARGV[0]));' -- "$0")
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3572030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档