bash shell将当前文件的路径存储为变量?

时间:2018-02-11 15:37:12

标签: python bash shell environment-variables

在Python中启动项目时,我想将一些环境变量保存在名为environment_variables的文件中,并将该文件源于bashrc。

该文件看起来像这样:

username=$(whoami)

# project root path
export PROJECT_DIR='/home/'$username'/nuclei_segmentation/'

# project data path
export DATA_DIR=$PROJECT_DIR"data/"

# location of models 
export MODEL_DIR=$PROJECT_DIR"models/"

# project output data
export OUTPUT_DIR=$PROJECT_DIR"output/"

我想更改PROJECT_DIR路径,因此它与平台/名称无关。因此,此environment_variables文件将始终位于项目的根目录中,并且我希望将PROJECT_DIR设置为始终是environment_variables文件的位置。

我以为我可以用PWD执行此操作但是当从bashrc调用时会产生错误,我还想到了一个使用find从根目录中搜索文件的解决方案,但这似乎很复杂并且认为在那里必须是更好的方式吗?

2 个答案:

答案 0 :(得分:1)

如果我完全理解你想要的地方,我的推荐是

  • 尽可能使代码在当前目录之外工作。
  • 如果可以避免,请不要使用多个变量乱丢用户的环境。
  • 如果您必须拥有环境变量,请为其指定一个名称,以清楚地传达与其相关的内容。

在一些更具体的结论中,一个名为项目根的变量应该是你真正需要的。如果预期的文件在当前目录中,则不要求设置它。

export NUC_SEG_DIR=$HOME/nuclei_segmentation

在Python代码中,输入合理的默认值。在这种特殊情况下,期望os.path.join(os.environ['NUC_SEG_DIR'], 'data')指向您的data目录等。如果用户想要覆盖它,那么使用符号链接就足够了。确保在代码中对其进行参数化,以便在将来可以配置时,可以在单个位置轻松覆盖。也许像是

def nuc_seg(root_dir=os.environ['NUC_SEG_DIR'], data_dir='./data', model_dir='./models', output_dir='./output'):
    if root_dir == '':
        root_dir='.'
    ... your code here

以后可能会使用命令行界面让用户通过命令行选项或配置文件覆盖这些值。

同样,不要求用户编辑他们的.bash_profile或类似内容 - 如果他们想在不同的目录中运行多个实验,或者其他什么?他们可以弄清楚如何使环境变量永久化,或者如果不希望您的用户熟悉shell的基础知识,您甚至可以将其记录为选项

答案 1 :(得分:-1)

在脚本文件中使用dirname $0查找当前脚本文件所在的目录