在获取脚本时如何引用脚本的当前目录?

在获取脚本时如何引用脚本的当前目录?

我有一个通过 调用的脚本. ./env/setenv.sh。在此脚本中,我调用一个也位于./env/.

我当前的目录是沿着~/dev/project/并且我正在调用进入 ~/dev/project/env通过. ./env/setenv.sh

我尝试 ( ${dirname $0}) 从内部引用 的位置setenv.sh并没有成功,因为我当前的工作目录被考虑/bin而不是~/dev/project/env/(我假设是因为我使用 采购它.

我还有哪些其他选项可以引用setenv.sh脚本的当前工作目录,以便它可以.py从同一目录中调用我的脚本?

例如,

WORKING_DIR=$(dirname "$0")
echo $WORKING_DIR
export VAR=$(python $WORKING_DIR/script.py)"

当通过. ./env/setenv.shprints:调用时/bin,并且无法定位script.py

答案1

如果您正在使用bash,这应该有效:

$ cat env/setenv.sh 
WORKING_DIR="$(dirname "${BASH_SOURCE[0]}")"
printf '%s is located in directory %s\n' \
         "$(basename "${BASH_SOURCE[0]}")" "$(dirname "${BASH_SOURCE[0]}")"

PYT_FILE="$WORKING_DIR/script.pyt"

printf 'Python script %s is located in directory %s\n' \
         "$(basename "${PYT_FILE}")" "$(dirname "${PYT_FILE}")"

printf 'Path to Python script is %s\n' "${PYT_FILE}"

$ . ./env/setenv.sh 
setenv.sh is located in directory ./env
Python script script.pyt is located in directory ./env
Path to Python script is ./env/script.pyt

相关内容