获取文件 OS X 的绝对路径

获取文件 OS X 的绝对路径

我正在创建一个脚本,它将提示用户输入文件位置并将其转换为绝对路径。

这是我到目前为止所拥有的。我不知道如何将这些附加在一起。

绝对.sh

read -e -p "Enter a path to a file: " PATH
CONVERTPATH="$(pwd $PATH)" "/" "$(basename $PATH)"
echo Absolute path is $CONVERTPATH

答案1

为了追加,您所需要做的就是去掉多余的引号,例如,更改

CONVERTPATH="$(pwd $PATH)" "/" "$(basename $PATH)"

CONVERTPATH="$(pwd $PATH)/$(basename $PATH)"

但也存在一些问题:

  • pwd不接受争论;您可以dirname在所提供的案例中使用。
  • read命令不会设置PATH;将其重命名为,例如name
  • echo命令未完全引用

那些修复,你会得到这个:

#!/bin/bash
read -e -p "Enter a path to a file: " name
CONVERTPATH="$(dirname $name)/$(basename $name)"
echo "Absolute path is $CONVERTPATH"

它不处理有人使用变量回复提示的情况。另外, 的预期用途pwd很可能是获取绝对目录。您可以通过进一步替换来尝试

#!/bin/bash
read -e -p "Enter a path to a file: " name
head=$(dirname "$name")
head=$(cd "$head" && pwd)
CONVERTPATH="$head/$(basename $name)"
echo "Absolute path is $CONVERTPATH"

然而,它仍然不会做你想做的事。问题(从您的角度来看)是,pwd在 OSX 上,系统只会根据命令中的任何符号链接来回显结果cd。这不仅仅是 OSX 的怪癖,而是长期存在的 Unix 行为,例如,它允许您cd进入一个没有权限pwd通过跟踪条目链执行正确操作的目录..

如果您想要一个结果中不包含任何符号链接的绝对路径名,则需要采用不同的方法。 OSX 有realpath——但不是在命令行上。在其他一些系统上,您可以使用readlink -f,但不在这里。

对于此主题的一般性讨论:

相关内容