我想编写一个 bash 脚本,它接受一个文件规范作为输入参数,该文件规范包含一个或多个特殊字符.
、..
和~
。我希望脚本的输出能够反映 Bash 对我的脚本的完整路径解释。
这是我尝试过的脚本:
a=$(ls -l -o -g "${1}" | cut --delimiter=' ' --fields=1-6 --complement -)
echo "\\"${a}\\""
如果我发出命令:myscript ~/.local/../.profile
返回的结果是:/home/OldManK/.local/../.profile
。但是,我想要:/home/OldManK/.profile
。
另一个例子:myscript ~/./.profile
返回:/home/OldManK/./.profile
,但是,我想要:/home/OldManK/.profile
。
另一个(从 执行/home/OldManK/.local
):myscript ../.profile
返回:../.profile
,但是,我想要:/home/OldManK/.profile
。
请问还有其他方法吗?
答案1
使用realpath
:
$ realpath ~/.local/bin/../mycommand
/home/user/.local/mycommand
从人真实路径:
DESCRIPTION
Print the resolved absolute file name; all but the last component must exist