在Solaris中是否有可以獲得實際路徑的實用程序?在solaris shell中獲取實際路徑
cd /home/me/test
realpath .. # got /home/me in linux
我可以在linux上做realpath,但是在solaris上似乎沒有。
在Solaris中是否有可以獲得實際路徑的實用程序?在solaris shell中獲取實際路徑
cd /home/me/test
realpath .. # got /home/me in linux
我可以在linux上做realpath,但是在solaris上似乎沒有。
function realpath {
[ -d "$1" ] && (
CDPATH= \cd "$1"
/bin/pwd
) || (
CDPATH= \cd "$(dirname "$1")" &&
printf "%s/%s\n" "$(/bin/pwd)" "$(basename $1)"
)
}
一些評論:
雖然功能是不可POSIX,建議用它代替至少在KSH傳統name() { ... }
語法這可能是在Solaris下最常用的外殼。
\cd
用於vs cd
以防止其他物質使用殼內建物,然後避免不需要的副作用。 /bin/pwd
用於調用pwd
作爲非內建命令,因爲它不知道父shell如何進入當前目錄,因此只能得到它的真實路徑。
我就遇到了這個在Solaris 10平臺上,這裏是找到了答案(包括jlliagre的答案的簡化版本)
完整路徑,以及符號鏈接解析:
全路徑,沒有符號鏈接解析:
一個需要問自己的問題是,$(其中PWD)?
Solaris pwd binary不帶任何參數,/ usr/bin/pwd -P嚴格等同於/ usr/bin/pwd和'/ bin/pwd。 – jlliagre 2012-10-25 10:06:00
我知道這是一箇舊的q & a,但在我看來,提供的realpath函數有兩個缺點。一,它改變當前的工作目錄,這可能在一次(或多次)調用該函數後出人意料。二,它似乎只適用於目錄路徑。可能是一個比較普遍的功能如下(我是一個bash用戶,只需要這個腳本,所以我跳過了backslashing。)
function realpath {
local base=$(basename $1)
local d=$(dirname $1)
(cd $d ; echo $(/bin/pwd)/$base)
}
感謝您指出我以前的答案缺點。請注意,當路徑組件包含空格時,您的建議將會中斷。 – jlliagre 2015-06-18 06:15:34
三思之後,我原來的問題是「真實路徑」替代。所以jliagre的回答是正確的。 – 2012-10-25 01:56:30