Unix 列表绝对文件名

Mat*_*ams 0 unix bash path ls

给定一个表示文件(或目录、设备等)的任意单个参数,我如何获得该参数的绝对路径?

我已经看到这个问题的许多答案涉及 find/ls/stat/readlink 和 $PWD,但没有一个适合我的需要。看起来最接近的答案是 ksh 的“whence”命令,但我需要它在 sh/bash 中工作。

假设文件 foo.txt 位于我的主目录 /Users/matthew/foo.txt 中。尽管我当前的工作目录是什么(我正在调用命令“abs”),但我需要以下行为:

(PWD is ~)
$ abs foo.txt
/Users/matthew/foo.txt

$ abs ~/foo.txt
/Users/matthew/foo.txt

$ abs ./foo.txt
/Users/matthew/foo.txt

$ abs /Users/matthew/foo.txt
/Users/matthew/foo.txt
Run Code Online (Sandbox Code Playgroud)

“腹肌”到底是什么?

TIA,马修

Emi*_*Sit 5

在 Linux(使用 GNU coreutils)上,readlink -f做你需要的。

对于 BSD 派生系统或 OS X,您可能需要做更多的工作。见/sf/ask/73897001/