pwd vs文件目录

时间:2014-09-29 22:50:13

标签: python bash shell

我有一个文件,我想获取该文件所在的目录。在python中,我会这样做:

FILE_DIR = os.path.dirname(os.path.realpath(__file__))

我如何在shell脚本中执行相同的操作?如果我使用pwd,我将获取我正在执行命令的文件夹的当前目录,而不是我正在执行的文件的文件夹(这是我需要的)。

2 个答案:

答案 0 :(得分:2)

当您执行shell脚本时,$0是您正在执行的脚本的名称(请参阅Bash初学者指南的Variables章节中的特殊参数),相当于{ Python中的{1}}(除非您调用了sys.argv[0])。

dirname命令与Python中的shift执行相同的操作。

没有便携式直接等效于os.path.dirnameos.path.abspathos.path.realpath。有特定于平台的方法(例如,在具有GNU用户空间的系统上readlink -f),或者您手动将$0与路径组合在一起。请参阅Unix上的this question了解各种不同的方法,但mrfripp's answer似乎最便携:

pwd

或者,当然,你可以让Python去做:

abspath=$(unset CDPATH && cd "$(dirname "$0")" && echo ${PWD}/$(basename "$0"))

答案 1 :(得分:1)

一个解决方案是:

FILE_PATH=`realpath $0`
FILE_DIR=`dirname $FILE_PATH`

或者像bash一样的shell:

FILE_DIR=$(dirname $(realpath $0))

请注意,realpath仅保证在基于GNU的系统(例如Linux)上可用。