Bash脚本绝对路径与OSX
我正在尝试获取OS X上当前正在运行的脚本的绝对路径。
我看到很多回复为readlink -f $0
。 但是,由于OS X的readlink
与BSD相同,因此它不起作用(它与GNU版本一起使用)。
任何建议的开箱即用解决方案?
有一个realpath()
C函数可以完成这项工作,但我在命令行上没有看到任何可用的东西。 这是一个快速而肮脏的替代品:
#!/bin/bash
realpath() {
[[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
}
realpath "$0"
如果以/
开头,则会逐字打印路径。 如果不是,它必须是相对路径,所以它将$PWD
放在前面。 #./
零件从$1
的前面./
。
这三个简单的步骤将解决这个问题和许多其他OSX问题:
brew install coreutils
grealpath .
(3)可能改变为实际realpath
,参见(2)输出
啊。 我发现以前的答案有点想要,原因有几个:特别是,它们不能解决多层次的符号链接,而且它们非常“Bash-y”。 尽管原始问题明确要求提供“Bash脚本”,但它也提及了Mac OS X的类似BSD的非GNU readlink
。 所以这里是一个合理的可移植性的尝试(我用bash检查它为'sh'和破折号),解决任意数量的符号链接; 它也应该与路径中的空白一起工作,尽管我不确定如果空白是实用程序本身的基本名称的行为,那么也许,呃避免这种情况?
#!/bin/sh
realpath() {
OURPWD=$PWD
cd "$(dirname "$1")"
LINK=$(readlink "$(basename "$1")")
while [ "$LINK" ]; do
cd "$(dirname "$LINK")"
LINK=$(readlink "$(basename "$1")")
done
REALPATH="$PWD/$(basename "$1")"
cd "$OURPWD"
echo "$REALPATH"
}
realpath "$@"
希望可以对某人有用。
链接地址: http://www.djcxy.com/p/1667.html上一篇: Bash script absolute path with OSX
下一篇: How to set current working directory to the directory of the script?