设置pythonpath的bash脚本



mssql-cli使用以下bash脚本来执行实际的python脚本。据我了解代码,while 循环确定执行脚本的当前目录,然后将此路径添加到 PYTHONPATH 中。 当前目录中没有.py文件,那么为什么要将路径添加到 PYTHONPATH 中?有人可以向我解释脚本的第一部分在做什么吗?谢谢你在这里帮助我。

#!/bin/bash
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
SOURCE="$(readlink "$SOURCE")"
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
# Set the python io encoding to UTF-8 by default if not set.
if [ -z ${PYTHONIOENCODING+x} ]; then export PYTHONIOENCODING=utf8; fi
export PYTHONPATH="${DIR}:${PYTHONPATH}"
python -m mssqlcli.main "$@"

想知道这是否仍然与你相关,但我已将其标记为有趣的谜题,以便稍后重新审视......长话短说:它将此脚本文件所在的位置目录添加到PYTHONPATH,并解析了所有符号链接(获取的文件名和导致 is 的目录都不是符号链接(。

这与使用readlink(或realpath(这样做基本相同:

export PYTHONPATH="$(dirname $(readlink -f ${BASH_SOURCE})):${PYTHONOATH}"

逐行剖析:

SOURCE="${BASH_SOURCE[0]}"

这会将SOURCE设置为调用或获取此脚本的路径。

while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink

如果路径引用符号链接SOURCE我们进入 wile 循环。 即在这个文件的第一次迭代中是一个符号链接。随后,如果这是一个指向另一个链接的链接。

DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"

这(对-P的简化解释(更改为目录,SOURCE正在解析沿途的符号链接(即登陆链接指向的目录(并在更改后打印工作目录(绝对路径(。在子壳中发生的所有事情和结果都分配给变量DIR

SOURCE="$(readlink "$SOURCE")"

SOURCE被分配一个新的路径值,由符号链接解析产生。从字面上看,链接指向的目标(例如ls -l(相对或绝对。

[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located

如果我们通过符号链接解析获得的SOURCE值不是以/开头(即是绝对路径(,DIR(我们进入循环的SOURCE所在的目录(和解析的符号链接SOURCE/上连接起来形成一个新的SOURCE(我们将其变成绝对路径(,然后我们回到这个循环的顶部。注意:在这种情况下,转义/似乎是不必要和任意的。

done

完成后。SOURCE指向不是符号链接的文件。此时,它的路径可能仍包含符号链接,这将在下一步中处理。

DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"

再一次,就像在循环中一样。DIR现在应该指向已解析(不是符号链接(SOURCE文件(最初调用/源的目标(所在的目录。

# Set the python io encoding to UTF-8 by default if not set.
if [ -z ${PYTHONIOENCODING+x} ]; then export PYTHONIOENCODING=utf8; fi

如果未设置shell变量或等于空字符串,则导出环境变量。注意:${PYTHONIOENCODING+x}似乎是另一种形式的${PYTHONIOENCODING:+x},它的使用似乎绝对是任意的。还有一个测试来检查是否设置了变量(无论其值如何(。

export PYTHONPATH="${DIR}:${PYTHONPATH}"

PYTHONPATH现在设置为从绝对解析的路径(路径上的任何地方都不应有符号链接(开始,该路径所在的脚本(或此链接指向的文件(所在的位置。

python -m mssqlcli.main "$@"

调用蟒蛇...

最新更新