从参数获取文件的完整路径

时间:2015-06-23 02:52:56

标签: bash shell sh

我正在编写一个shell脚本,我对它很新,但是当脚本运行时,第一个第一个/第二个参数(取决于你如何看待它)将是要加载和执行的文件。我的问题是,如何根据运行目录myscript的位置获取文件的位置?

myscript path/to/file.ext
myscript file.ext
myscript ../../file.ext

基本上我想获取传入文件的路径。怎么做?

3 个答案:

答案 0 :(得分:3)

此代码段将为您提供脚本的完整路径以及任何参数:

DIR="$( cd "$( dirname "$i" )" && pwd )"

$i替换为$0以获取脚本的完整路径(myscript)。 $1$2,...将为您提供子序列参数的完整路径。

答案 1 :(得分:3)

最简单的方法是使用realpath "$1"。尽管意图用于符号链接,但事实证明它比使用路径绝对的一般问题的大多数其他方法更好。

在许多系统上,默认情况下可能未安装realpath。有时它在自己的包中,有时它在coreutils等等。

顺便说一句,这类问题可能更适合于https://unix.stackexchange.com,即使这不是偏离主题的。

答案 2 :(得分:2)

在bash中:

pathToFile=$(dirname $1)
fileName=$(basename $1)
scriptPath=$(dirname $0)
scriptName=$(basename $0)
currentPath=$(pwd)

在其他shell中,您可以尝试使用`(后引用)

重新生成$(和)