相关疑难解决方法(0)

从脚本本身获取Bash脚本的源目录

如何获取其中的目录路径的Bash脚本位于,里面那个脚本?

例如,假设我想使用Bash脚本作为另一个应用程序的启动器.我想将工作目录更改为Bash脚本所在的目录,因此我可以对该目录中的文件进行操作,如下所示:

$ ./application

directory bash

4672
推荐指数
44
解决办法
158万
查看次数

如何将当前工作目录设置为脚本目录?

我正在写一个bash脚本.我需要当前的工作目录始终是脚本所在的目录.

默认行为是脚本中的当前工作目录是我运行它的shell的目录,但我不想要这种行为.

bash scripting path

500
推荐指数
7
解决办法
35万
查看次数

Unix shell脚本找出脚本文件所在的目录?

基本上我需要使用与shell脚本文件位置相关的路径运行脚本,如何将当前目录更改为脚本文件所在的目录?

unix shell

459
推荐指数
14
解决办法
50万
查看次数

如何在Mac上获取GNU的readlink -f的行为?

在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)

macos freebsd sh

341
推荐指数
13
解决办法
11万
查看次数

OS X的Bash脚本绝对路径

我试图获取OS X上当前运行脚本的绝对路径.

我看到很多回复readlink -f $0.但是,由于OS X readlink与BSD相同,它只是不起作用(它适用于GNU的版本).

有没有开箱即用的解决方案?

macos bash path

85
推荐指数
10
解决办法
6万
查看次数

从脚本中获取Swift脚本的路径

我正在Swift中编写一个脚本,我希望它能够修改一些与脚本本身始终存在于同一目录中的文件.有没有办法从内部获取脚本的路径?我试过了:

print(Process.arguments)
Run Code Online (Sandbox Code Playgroud)

但是,它只输出实际给予脚本的路径,该路径可能是完全解析的路径,只是文件名,或者介于两者之间的任何内容.

我打算运行脚本swift /path/to/my/script.swift.

command-line-arguments swift swift2

10
推荐指数
2
解决办法
5255
查看次数

为什么更改LD_LIBRARY_PATH对Ubuntu没有影响?

我试图部署我的应用程序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 applicationapplication.sh文件打印LD_LIBRARY_PATH它给我以下输出 -

在此输入图像描述 请检查标记的部分.任何人都可以解释为什么Qt即使在导出后仍未找到该文件夹中的库LD_LIBARRY_PATH

编辑:

所以正如@Zang建议的那样,我检查了调试日志,这里是 -

请检查标记的部分.

在此输入图像描述

看起来它实际上正在尝试实际libQt5MultimediaWidgets.so,然后报告它无法找到它.有谁能帮我理解这里发生的事情?

编辑-2:根据@Tarun的建议,我已经ls -al在我的Qt文件夹上运行了.这是输出 -

在此输入图像描述

ubuntu qt shared-libraries

8
推荐指数
3
解决办法
1661
查看次数

源bash脚本到另一个

可能重复:
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)

因此,我有:

  1. search.sh脚本对<git_root>目录的相对路径

我想要的是:能够test.sh从内部任何地方运行<git_root>而不会出错.

PS:无法使用永久绝对路径,search.sh因为git存储库可以克隆到任何位置.

bash shell

6
推荐指数
1
解决办法
5090
查看次数

npm包中的二进制文件

我尝试创建一个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在另一个目录中.如何从我的脚本中获取此目录名称?或者也许有更好的方法来做到这一点?

javascript binary bash node.js npm

4
推荐指数
1
解决办法
4067
查看次数