我正在编写一个shell脚本,我对它很新,但是当脚本运行时,第一个第一个/第二个参数(取决于你如何看待它)将是要加载和执行的文件。我的问题是,如何根据运行目录myscript
的位置获取文件的位置?
myscript path/to/file.ext
myscript file.ext
myscript ../../file.ext
基本上我想获取传入文件的路径。怎么做?
答案 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中,您可以尝试使用`(后引用)
重新生成$(和)