Arquivo de origem .bashrc no bash globalmente

1

Portanto, estou tentando escrever um script que compila o VMAF a partir do GIT e preciso alterar o local do PYTHONPATH para o diretório de instalação. O script está funcionando bem e está instalando o VMAF, mas o problema é que, quando eu obtenho as alterações no .bashrc, ele é válido até que o script bash seja concluído, e eu quero torná-las globalmente. Eu entendo que o processo bash está isolando as mudanças, mas existe uma maneira de executar a fonte que persiste a execução do script? Este é o meu código:

#!/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
    
por Georgе Stoyanov 24.02.2017 / 16:12

1 resposta

0

Provavelmente não é a solução mais elegante, mas você pode definir as variáveis globais em /etc/bash.bashrc e executar unittest com bash -c unittest . Eu * acho * que vai funcionar, mas YMMV.

Eu não posso deixar de salientar que há software livre de código aberto, como Chef e Puppet, projetado para automatizar coisas como essa. Enquanto há uma curva de aprendizado a ser superada, ambas são bem documentadas com tutoriais. Eu sou parcial ao Chef e usaria isso se tivesse que fazer o que você está tentando fazer aqui.

Dê uma olhada no link para obter uma sinta como usar o Chef no modo local, que é o que eu faria nessa situação. Aqui está um roteiro do Chef que escrevi para você começar, mas use-o por sua conta e risco. Eu não testei isso. Salve-o em algo como 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

Isso está incompleto, então você precisará adicionar um bloco de recursos para lidar com o processo de criação. Há vários anos, mas dê uma olhada em link para alguma direção sobre como fazer isso.

Por fim, tenha em mente que chef-client deve ser executado como root, portanto, você desejará usar a propriedade "user" dentro do bloco de recursos "git" para definir a propriedade do repositório vmaf clonado corretamente. Consulte o link para obter mais informações.

    
por 24.02.2017 / 18:39