我有一个文件,我想获取该文件所在的目录。在python中,我会这样做:
FILE_DIR = os.path.dirname(os.path.realpath(__file__))
我如何在shell脚本中执行相同的操作?如果我使用pwd
,我将获取我正在执行命令的文件夹的当前目录,而不是我正在执行的文件的文件夹(这是我需要的)。
答案 0 :(得分:2)
当您执行shell脚本时,$0
是您正在执行的脚本的名称(请参阅Bash初学者指南的Variables章节中的特殊参数),相当于{ Python中的{1}}(除非您调用了sys.argv[0]
)。
dirname
命令与Python中的shift
执行相同的操作。
没有便携式直接等效于os.path.dirname
或os.path.abspath
和os.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)上可用。