全局 bash 中的源 .bashrc 文件

全局 bash 中的源 .bashrc 文件

所以我试图编写一个从 GIT 编译 VMAF 的脚本,我需要将 PYTHONPATH 位置更改为安装目录。该脚本运行良好,并且正在安装 VMAF,但问题是,当我在 .bashrc 中进行更改时,它在 bash 脚本完成之前一直有效,并且我想在全局范围内进行更改。我知道 bash 进程正在隔离更改,但是有没有办法执行源以保持脚本的执行?这是我的代码:

#!/bin/bash

mkdir $HOME/install
sudo apt-get install python-dev python-pip python-tk -y
sudo pip install --upgrade scikit-learn h5py numpy scipy matplotlib pandas

cd $HOME/install
git clone https://github.com/Netflix/vmaf.git
cd $HOME/install/vmaf
make
echo "export PYTHONPATH=$HOME/install/vmaf/python:\$PYTHONPATH" | sudo tee -a $HOME/.bashrc
echo "alias ll='ls -al --color'" | sudo tee -a $HOME/.bashrc

source $HOME/.bashrc
./unittest

答案1

可能不是最优雅的解决方案,但您可以在 /etc/bash.bashrc 中定义全局变量并使用bash -c unittest.我*认为*这会起作用,但是YMMV。

我忍不住指出,有像 Chef 和 Puppet 这样的免费开源软件旨在实现此类自动化操作。虽然需要克服一个学习曲线,但两者都有详细的教程记录。我偏爱 Chef,如果我必须做你在这里尝试做的事情,我会使用它。

看一眼https://learn.chef.io/tutorials/learn-the-basics/ubuntu/free/configure-a-resource/感受一下如何在本地模式下使用 Chef,这就是我在这种情况下会做的事情。这是我为帮助您入门而编写的 Chef 脚本,但使用它的风险由您自行承担。我还没有测试过。将其保存为 install_vmaf.rb 之类的文件。

include_recipe 'python'
include_recipe 'python::pip'

['python-dev','python-pip','python-tk'].each do |p|
  package p do
    action :install
  end
end

['scikit-learn','h5py','numpy','scipy','matplotlib','pandas'].each do |p|
  python_pip p do
    action :install
  end
end

git "/path/to/check/out/to" do
  repository "https://github.com/Netflix/vmaf.git"
  reference "master"
  action :sync
end

这是不完整的,因此您需要添加一个资源块来处理构建过程。虽然已经好几年了,但还是看看https://serverfault.com/questions/298013/installing-something-from-source-using-chef-should-i-be-doing-some-checks有关如何执行此操作的一些指导。

最后,请记住chef-client以 root 身份运行,因此您需要使用“git”资源块中的“user”属性来正确设置克隆的 vmaf 存储库的所有权。看https://docs.chef.io/resource_git.html了解更多信息。

相关内容