そのため、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
。
この種のタスクを自動化するように設計された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より多くの情報を知りたいです。