首页 文章

确定执行BASH脚本的路径[重复]

提问于
浏览
92

可能重复:Bash脚本可以告诉它存储在哪个目录中吗?

在Windows命令脚本中,可以使用 %~dp0 确定当前正在执行的脚本的目录路径 . 例如:

@echo Running from %~dp0

BASH脚本中的等价物是什么?

5 回答

  • 2

    对于相对路径(即直接等效于Windows' %~dp0 ):

    MY_PATH="`dirname \"$0\"`"
    echo "$MY_PATH"
    

    对于绝对的规范化路径:

    MY_PATH="`dirname \"$0\"`"              # relative
    MY_PATH="`( cd \"$MY_PATH\" && pwd )`"  # absolutized and normalized
    if [ -z "$MY_PATH" ] ; then
      # error; for some reason, the path is not accessible
      # to the script (e.g. permissions re-evaled after suid)
      exit 1  # fail
    fi
    echo "$MY_PATH"
    
  • 132

    假设您键入bash脚本的完整路径,请使用 $0dirname ,例如:

    #!/bin/bash
    echo "$0"
    dirname "$0"
    

    示例输出:

    $ /a/b/c/myScript.bash
    /a/b/c/myScript.bash
    /a/b/c
    

    如有必要,将 $PWD 变量的结果附加到相对路径 .

    编辑:添加引号来处理空格字符 .

  • 20

    供稿人: Stephane CHAZELAS 于c.u.s.假设POSIX shell:

    prg=$0
    if [ ! -e "$prg" ]; then
      case $prg in
        (*/*) exit 1;;
        (*) prg=$(command -v -- "$prg") || exit;;
      esac
    fi
    dir=$(
      cd -P -- "$(dirname -- "$prg")" && pwd -P
    ) || exit
    prg=$dir/$(basename -- "$prg") || exit 
    
    printf '%s\n' "$prg"
    
  • 3
    echo Running from `dirname $0`
    
  • 8

    弗拉德的代码被过度引用 . 应该:

    MY_PATH=`dirname "$0"`
    MY_PATH=`( cd "$MY_PATH" && pwd )`
    

相关问题