Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置pythonpath的Bash脚本_Python_Bash - Fatal编程技术网

设置pythonpath的Bash脚本

设置pythonpath的Bash脚本,python,bash,Python,Bash,使用以下bash脚本来执行实际的python脚本。根据我对代码的理解,while循环确定了执行脚本的当前目录,然后将该路径添加到PYTHONPATH中。 当前目录中没有.py文件,为什么要将路径添加到PYTHONPATH?有人能给我解释一下剧本的第一部分在做什么吗。谢谢你在这里帮助我 #!/bin/bash SOURCE="${BASH_SOURCE[0]}" while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no l

使用以下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
)执行此操作基本相同:

逐行解剖:

SOURCE="${BASH_SOURCE[0]}"
这将
SOURCE
设置为调用或获取此脚本的路径

while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
如果
SOURCE
path引用符号链接,则进入wile循环。也就是说,在这个文件的第一次迭代中是一个符号链接。随后,如果这是指向另一个链接的链接

  DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
这(对
-p
的稍微简化的解释)将更改为
源代码
正在解析沿途符号链接的目录(即链接指向的目录中),并在更改后打印工作目录(绝对路径)。在子shell中发生的所有操作和结果都被分配给变量
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
完成后<代码>源代码指向非符号链接的文件。它的路径此时可能仍然包含符号链接,这将在下一步中处理

DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
再一次,就像在循环中一样
DIR
现在应该指向解析(不是符号链接)
SOURCE
文件(最初称为/sourceed的目标)所在的目录

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

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


调用python…

Awesome逐行剖析!
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 "$@"