Bash 从参数获取文件的完整路径
我正在编写一个shell脚本,我对它相当陌生,但是当脚本运行时,第一个/第二个参数(取决于您如何看待它)将是要加载和执行的文件。我的问题是,如何根据运行myscript的目录Bash 从参数获取文件的完整路径,bash,shell,sh,Bash,Shell,Sh,我正在编写一个shell脚本,我对它相当陌生,但是当脚本运行时,第一个/第二个参数(取决于您如何看待它)将是要加载和执行的文件。我的问题是,如何根据运行myscript的目录myscript获取文件的位置 myscript path/to/file.ext myscript file.ext myscript ../../file.ext 基本上,我希望获得传入的文件的路径。如何做到这一点?在bash中: pathToFile=$(dirname $1) fileName=$(basename
myscript
获取文件的位置
myscript path/to/file.ext
myscript file.ext
myscript ../../file.ext
基本上,我希望获得传入的文件的路径。如何做到这一点?在bash中:
pathToFile=$(dirname $1)
fileName=$(basename $1)
scriptPath=$(dirname $0)
scriptName=$(basename $0)
currentPath=$(pwd)
在另一个shell中,您可以尝试使用`(后引号)重新封装$(和)此代码段将为您提供脚本和任何参数的完整路径:
DIR="$( cd "$( dirname "$i" )" && pwd )"
将
$i
替换为$0
,以获取脚本的完整路径(myscript
)<代码>$1,$2
。。。将获得子序列参数的完整路径。最简单的方法是使用realpath“$1”
。尽管打算与符号链接一起使用,但事实证明,对于使路径成为绝对路径的一般问题,它比大多数其他方法更有效
在许多系统上,默认情况下可能不会安装realpath
。有时它在自己的包中,有时在coreutils
中,等等
顺便说一句,这类问题可能更适合讨论,即使它不是离题。这将帮助我获得我需要的文件基名。我觉得对于具有前面父目录的相对路径的路径,这会失败,例如
。/
。如果我在/home/dir1/
,那么输入(cd“$(dirname../dir2/”)&&pwd)
将返回/home/
,而不是/home/dir2/
。更新:无需担心,您是对的。在测试时,我没有在路径中添加所需的文件名,我只是单独测试目录。