如何获取其中的目录路径的Bash脚本位于,里面那个脚本?
例如,假设我想使用Bash脚本作为另一个应用程序的启动器.我想将工作目录更改为Bash脚本所在的目录,因此我可以对该目录中的文件进行操作,如下所示:
$ ./application
我正在写一个bash脚本.我需要当前的工作目录始终是脚本所在的目录.
默认行为是脚本中的当前工作目录是我运行它的shell的目录,但我不想要这种行为.
基本上我需要使用与shell脚本文件位置相关的路径运行脚本,如何将当前目录更改为脚本文件所在的目录?
在Linux上,该readlink实用程序接受一个-f跟随其他链接的选项.这似乎不适用于Mac和可能基于BSD的系统.相当于什么?
这是一些调试信息:
$ which readlink; readlink -f
/usr/bin/readlink
readlink: illegal option -f
usage: readlink [-n] [file ...]
Run Code Online (Sandbox Code Playgroud) 我试图获取OS X上当前运行脚本的绝对路径.
我看到很多回复readlink -f $0.但是,由于OS X readlink与BSD相同,它只是不起作用(它适用于GNU的版本).
有没有开箱即用的解决方案?
我正在Swift中编写一个脚本,我希望它能够修改一些与脚本本身始终存在于同一目录中的文件.有没有办法从内部获取脚本的路径?我试过了:
print(Process.arguments)
Run Code Online (Sandbox Code Playgroud)
但是,它只输出实际给予脚本的路径,该路径可能是完全解析的路径,只是文件名,或者介于两者之间的任何内容.
我打算运行脚本swift /path/to/my/script.swift.
我试图部署我的应用程序Ubuntu 16.04.所以我制作了一个包含以下层次结构的包 -
Package
|
----bin
|
-----application
-----application.sh
-----Qt
|
-----necessary qt libraries
-----platforms
Run Code Online (Sandbox Code Playgroud)
这是application.sh文件 -
#!/bin/sh
export LD_LIBRARY_PATH=`pwd`/Qt
./application
Run Code Online (Sandbox Code Playgroud)
当我执行该application.sh文件时,它显示我无法找到该libQt5MultimediaWidgets.so.5文件.但它在Qt文件夹中.此外,当我在导出后ldd application从application.sh文件打印LD_LIBRARY_PATH它给我以下输出 -
请检查标记的部分.任何人都可以解释为什么Qt即使在导出后仍未找到该文件夹中的库LD_LIBARRY_PATH?
编辑:
所以正如@Zang建议的那样,我检查了调试日志,这里是 -
请检查标记的部分.
看起来它实际上正在尝试实际libQt5MultimediaWidgets.so,然后报告它无法找到它.有谁能帮我理解这里发生的事情?
编辑-2:根据@Tarun的建议,我已经ls -al在我的Qt文件夹上运行了.这是输出 -
可能重复:
bash脚本获取自身完整路径的可靠方式?
我有bash脚本test.sh,它search.sh通过以下行使用来自另一个脚本的函数:
source ../scripts/search.sh
<call some functions from search.sh>
Run Code Online (Sandbox Code Playgroud)
这两个脚本都位于git存储库中.search.sh在<git_root>/scripts/目录中,test.sh位于同一目录中(但是,一般来说,可以位于<git_root>目录内的任何位置- 我的意思是我不能依赖于以下source search.sh方法).
当我test.sh从<git_root>/scripts/一切调用脚本运行良好,但一旦我更改当前工作目录test.sh失败:
cd <git_root>/scripts/
./test.sh //OK
cd ..
./scripts/test.sh //FAILS
./scripts/test.sh: line 1: ../scripts/search.sh: No file or directory ...
Run Code Online (Sandbox Code Playgroud)
因此,我有:
search.sh脚本对<git_root>目录的相对路径我想要的是:能够test.sh从内部任何地方运行<git_root>而不会出错.
PS:无法使用永久绝对路径,search.sh因为git存储库可以克隆到任何位置.
我尝试创建一个npm包,它可以作为shell中的命令启动.我有package.json
{
"name": "myapp",
"version": "0.0.6",
"dependencies": {
"async": "",
"watch": "",
"node-promise": "",
"rmdir": "",
"should": "",
"websocket": ""
},
"bin": "myapp"
}
Run Code Online (Sandbox Code Playgroud)
和 myapp
#!/bin/bash
path=`dirname "$0"`
file="/myapp.js"
node $path$file $1 &
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
module.js:340
throw err;
^
Error: Cannot find module '/usr/local/bin/myapp.js'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:902:3
Run Code Online (Sandbox Code Playgroud)
问题是myapp.js在另一个目录中.如何从我的脚本中获取此目录名称?或者也许有更好的方法来做到这一点?