我正在创建一个脚本,它将提示用户输入文件位置并将其转换为绝对路径。
这是我到目前为止所拥有的。我不知道如何将这些附加在一起。
绝对.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
,但不在这里。
对于此主题的一般性讨论: