相关疑难解决方法(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万
查看次数

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

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

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

bash scripting path

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

bash/fish命令用于打印文件的绝对路径

问题:是否有一个简单的sh/bash/zsh/fish/...命令来打印我提供的文件的绝对路径?

用例:我在目录中/a/b,我想c在命令行上打印文件的完整路径,以便我可以轻松地将其粘贴到另一个程序中:/a/b/c.简单但是一个小程序可以在处理长路径时节省大约5秒钟,这最终会增加.因此,令我惊讶的是,我无法找到标准实用程序来执行此操作 - 真的没有吗?

这是一个示例实现,abspath.py:

#!/usr/bin/python
# Author: Diggory Hardy <diggory.hardy@gmail.com>
# Licence: public domain
# Purpose: print the absolute path of all input paths

import sys
import os.path
if len(sys.argv)>1:
    for i in range(1,len(sys.argv)):
        print os.path.abspath( sys.argv[i] )
    sys.exit(0)
else:
    print >> sys.stderr, "Usage: ",sys.argv[0]," PATH."
    sys.exit(1)
Run Code Online (Sandbox Code Playgroud)

bash shell path

405
推荐指数
14
解决办法
28万
查看次数

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

如何在Bash中规范化文件路径?

我想转换/foo/bar/../foo

是否有一个bash命令执行此操作?


编辑:在我的实际案例中,目录确实存在.

unix linux bash shell

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

何时在shell变量周围包装引号?

有人能告诉我是否应该在shell脚本中包含变量的引号?

例如,以下是正确的:

xdg-open $URL 
[ $? -eq 2 ]
Run Code Online (Sandbox Code Playgroud)

要么

xdg-open "$URL"
[ "$?" -eq "2" ]
Run Code Online (Sandbox Code Playgroud)

如果是这样,为什么?

unix linux bash shell quotes

145
推荐指数
4
解决办法
5万
查看次数

25
推荐指数
2
解决办法
1万
查看次数

获取OS X shell脚本在脚本中的路径...当路径有空格时

我在Bash脚本中使用它来获取我运行脚本的路径.在OS X中双击.command文件是必要的.

#!/bin/bash
BASEDIR=$(dirname $0)
cd $BASEDIR
Run Code Online (Sandbox Code Playgroud)

问题是当路径有空格时它不起作用.你怎么能解决这个问题?

macos bash

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

标签 统计

bash ×7

path ×4

shell ×3

linux ×2

macos ×2

unix ×2

directory ×1

freebsd ×1

git ×1

quotes ×1

scripting ×1

sh ×1