dim*_*pol 20 command-line bash scripts paths
假设我有一个名为 .bash 的 bash 文件myBash.bash
。它驻留在:
/myDirect/myFolder/myBash.bash
Run Code Online (Sandbox Code Playgroud)
现在我想在脚本中使用字符串/myDirect/myFolder
(的位置myBash.bash
)。有没有我可以用来找到这个位置的命令?
编辑:这个想法是我想设置一个 zip 文件夹,其中包含可以由该 zip 文件中的 bash 脚本启动的代码。我知道该 zip 文件中代码的相对文件路径,但不知道绝对路径,我需要这些。一种方法是在路径中进行硬编码,或者要求将文件的路径作为变量给出。但是,如果 bash 文件可以自行确定它的位置,然后根据其对 zip 文件结构的了解,创建到另一个文件的相关路径,我会发现它更容易。
Zan*_*nna 29
您可以获得完整路径,例如:
realpath "$0"
Run Code Online (Sandbox Code Playgroud)
dirname "$(realpath $0)"
Run Code Online (Sandbox Code Playgroud)
甚至更好地防止使用困难的文件名进行尴尬的引用和分词:
temp=$( realpath "$0" ) && dirname "$temp"
Run Code Online (Sandbox Code Playgroud)
比我之前解析它的想法要好得多(我知道会有更好的方法!)
realpath "$0" | sed 's|\(.*\)/.*|\1|'
Run Code Online (Sandbox Code Playgroud)
realpath
返回文件的实际路径$0
是这个文件吗(脚本)s|old|new|
替换old
为new
\(.*\)/
之前保存任何字符/
供以后使用\1
保存的部分小智 5
如果脚本在您的路径中,您可以使用类似的东西
$ myloc=$(dirname "$(which foo.sh)")
$ echo "$myloc"
/path/to/foo.sh
Run Code Online (Sandbox Code Playgroud)
编辑:在阅读了 Serg 的评论后,这可能是一个通用的解决方案,无论脚本是否在您的路径中都有效。
myloc==$(dirname "$(realpath $0)")
dirname "$myloc"
Run Code Online (Sandbox Code Playgroud)
接受的答案似乎很完美。这是另一种方法:
cd "$(dirname "$0")"
/bin/pwd
Run Code Online (Sandbox Code Playgroud)
/bin/pwd
打印目录的真实路径,而不是pwd
内置命令。
归档时间: |
|
查看次数: |
51230 次 |
最近记录: |