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

Get*_*awn 3 bash shell sh

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

myscript path/to/file.ext
myscript file.ext
myscript ../../file.ext
Run Code Online (Sandbox Code Playgroud)

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

o11*_*11c 7

最简单的方法是使用realpath "$1". 尽管旨在与符号链接一起使用,但事实证明,对于使路径成为绝对路径的一般问题,它比大多数其他方法更有效。

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

顺便说一句,这类问题可能更适合https://unix.stackexchange.com,尽管这里并不是偏离主题。


小智 5

在bash中:

pathToFile=$(dirname $1)
fileName=$(basename $1)
scriptPath=$(dirname $0)
scriptName=$(basename $0)
currentPath=$(pwd)
Run Code Online (Sandbox Code Playgroud)

在其他 shell 中,您可以尝试用 `(反引号)替换 $( 和 )


Tua*_*-Vu 5

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

DIR="$( cd "$( dirname "$i" )" && pwd )"
Run Code Online (Sandbox Code Playgroud)

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