相关疑难解决方法(0)

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

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

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

$ ./application

directory bash

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

Bash脚本获取自身完整路径的可靠方法

我有一个Bash脚本需要知道它的完整路径.我试图找到一种广泛兼容的方式来做到这一点,而不会结束相对或时髦的路径.我只需要支持Bash,而不是sh,csh等.

到目前为止我发现了什么:

  1. 地址中获取Bash脚本的源目录的接受答案是获取脚本的路径dirname $0,这很好,但可能会返回相对路径(如.),如果要更改目录中的目录,这是一个问题脚本并使路径仍指向脚本的目录.不过,dirname将成为这个难题的一部分.

  2. OS X的Bash脚本绝对路径 的接受答案(特定于OS X,但答案无论如何)都会给出一个函数,该函数将测试是否$0看起来相对,如果是,则会预先挂起$PWD.但是结果仍然可以包含相对位(虽然总体来说它是绝对的) - 例如,如果脚本t在目录中/usr/bin并且你进入/usr并且你输入bin/../bin/t它来运行它(是的,那是复杂的),你最终会得到/usr/bin/../binas脚本的目录路径.哪个有效,但......

  3. 此页面上readlink解决方案如下所示:

    # Absolute path to this script. /home/user/bin/foo.sh
    SCRIPT=$(readlink -f $0)
    # Absolute path this script is in. /home/user/bin
    SCRIPTPATH=`dirname $SCRIPT`
    
    Run Code Online (Sandbox Code Playgroud)

    但是readlink不是POSIX,显然解决方案依赖于GNU readlink,其中BSD由于某种原因无法工作(我无法访问类似BSD的系统进行检查).

所以,各种方式,但他们都有他们的警告.

什么是更好的方式?"更好"的意思是:

  • 给了我绝对的道路.
  • 即使以复杂的方式调用,也可以获得时髦的位(参见上面#2的评论).(例如,至少要对路径进行适度规范化.)
  • 仅依赖于Bash-isms或几乎肯定会出现在最流行的*nix系统(GNU/Linux,BSD和类似BSD的系统,如OS X等)上的东西.
  • 如果可能,避免调用外部程序(例如,更喜欢Bash内置程序). …

bash path

653
推荐指数
12
解决办法
42万
查看次数

如何在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万
查看次数

如何在POSIX中获取脚本目录?

我的bash脚本中有以下代码.现在我想在POSIX中使用它.那么如何转换呢?谢谢.

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" > /dev/null && pwd )"
Run Code Online (Sandbox Code Playgroud)

bash posix sh

47
推荐指数
1
解决办法
7299
查看次数

请参阅shell脚本中的当前目录

如何引用shell脚本中的当前目录?

所以我有这个脚本调用同一目录中的另一个脚本:

#! /bin/sh

#Call the other script
./foo.sh 

# do something ...
Run Code Online (Sandbox Code Playgroud)

为此,我得到了 ./foo.sh: No such file or directory

所以我改成了:

#! /bin/sh

#Call the other script
foo.sh 

# do something ...
Run Code Online (Sandbox Code Playgroud)

但是这会调用foo默认情况下在PATH中的脚本.这不是我想要的.

所以问题是,./在shell脚本中引用的语法是什么?

shell

16
推荐指数
2
解决办法
3万
查看次数

Mac OS X中的Shell脚本从主目录运行?

我是Windows和Linux的长期用户,并且在Mac OS X上编写shell脚本有一些奇怪的经历.特别是,我可以编写脚本并从终端运行它们,但每次我尝试从Finder运行一个它始终从用户的主目录而不是脚本所在的目录执行.也就是说,如果脚本位于

~/path/to/the/script.sh
Run Code Online (Sandbox Code Playgroud)

它总是耗尽~.在过去,我不得不问我更多精通Mac的朋友如何解决这个问题,并且他们经常使用一些非常糟糕的技术来做到这一点,但我认为没有任何理由可以解决这个问题.

我的问题是 - 有没有一种简单的方法可以在Mac OS X中编写一个shell脚本,当在Finder中双击时,它会用完它所在的目录?

macos shell

9
推荐指数
1
解决办法
5660
查看次数

标签 统计

bash ×3

macos ×2

sh ×2

shell ×2

directory ×1

freebsd ×1

path ×1

posix ×1