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

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

我正在编写一个shell脚本,我对它相当陌生,但是当脚本运行时,第一个/第二个参数(取决于您如何看待它)将是要加载和执行的文件。我的问题是,如何根据运行myscript的目录
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/
。更新:无需担心,您是对的。在测试时,我没有在路径中添加所需的文件名,我只是单独测试目录。