我有一个通过 调用的脚本. ./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.sh
prints:调用时/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