这里我读到了如何在fish中追加到PYTHONPATH,这对于一个字符串来说效果很好。
但是,如果我这样做:
set --export PYTHONPATH $PYTHONPATH path1 path2
我明白了:
>> import os
>> os.environ["PYTHONPATH"]
'path1\x1epath2'
或者:
$ python -c "import os; print os.environ['PYTHONPATH']"
path1path2
这里出了什么问题?
如果您使用的是fish 2.2.0(或刚刚发布的2.3.0),则只有三个环境变量会自动用冒号分隔和连接:PATH、MANPATH、CDPATH。所有其他“路径”列表环境变量都被视为单元素数组,除非您像示例中那样将它们显式设置为多个值。但是,如果在导出它们时执行此操作,则值将由 ASCII RS (0x1E) 字符分隔。您应该像在 bash、zsh 等中一样处理 PYTHONPATH。
fish 项目有几个悬而未决的问题,我们正在讨论处理这些变量的可能改进。见
https://github.com/fish-shell/fish-shell/issues/2090
您可以通过环境变量中的冒号分隔路径来设置多个路径。我不使用鱼,但例如在 ZSH 中,我会这样做:
$ export PYTHONPATH=/path/to/foo:/path/to/bar
$ python -c "import sys; print sys.path"
['', '/path/to/foo', '/path/to/bar', ...
Fish 在即将发布的 3.0 版本中提供了一种新机制来处理此问题。
请参阅以下 PR 了解更多信息:https://github.com/fish-shell/fish-shell/pull/5245
正如@Yichuan Wang正确指出的那样,在3.0.0版本中,Fish shell引入了一种处理路径变量的新方法(例如,
PYTHONPATH
,CDPATH
,LD_LIBRARY_PATH
等)。
要设置路径变量,请使用:
set -gx PYTHONPATH path1 path2
由于它以
PATH
结尾,fish 会自动假定它是一个 path-type 变量。例如,它将负责添加分隔冒号。
如果您想在 Fish 会话中保留此设置,请将此命令添加到 config.fish。
如果你想修改
PATH
变量,可以使用方便的函数fish_add_path:
fish_add_path /opt/some_app/bin
如果您希望在当前 shell 或 shell 重新启动之间保持持久性,请使用
-U
。