2017-10-10 60 views
1

問題R:系統()不能使用.bashrc中定義的bash函數

我的默認的Python 2.7,但我有需要Python 3.4的腳本。我想R中創建一個函數,將:

  1. 切換到Python 3.4
  2. 運行此腳本
  3. 切換回Python 2.7版
  4. 導入結果爲R

要在Python版本之間切換,我使用我的羣集的「dotkit」系統,如下所示:

use Python-2.7 
use Python-3.4 

「use」是一個在我的.bashrc文件中導入的bash函數。它設置了我所有的路徑變量(PATH,LIBRARY_PATH,LD_LIBRARY_PATH,CPATH,C_INCLUDE_PATH等)。問題是,當我嘗試調用R中這個功能,我得到以下錯誤:

system('use Python-3.4') 
sh: use: command not found 

看起來這是我路上的問題。我正在使用正確的外殼:

system('echo $SHELL') 
/bin/bash 

我的$ PATH變量也看起來不錯。然而,當我創建一個腳本,基本上做同樣的事情:

load_py34.sh:

#!/bin/bash 
source ~/.bashrc 
use Python-3.4 

和過R調用這個腳本,那麼它實際運行,但由於某些原因,它不在R改變我的Python版本(我已經驗證了這個腳本的命令行工作。)

> R 
> system('python --version') 
Python 2.7.1 
> system('sh load_py34.sh') 
Prepending: R-3.4 (ok) 
> system('python --version') 
Python 2.7.1 

所以我有點困惑,但如果有人能幫助,我將不勝感激。


建議的修復

當我將它們合併成一個單一的命令,我仍然有同樣的問題:

> system("sh load_py34.sh; python --version") 
Prepending: Python-3.4 (already loaded) 
Python 2.7.1 

當我嘗試直接調用bash中,我仍然有一個問題與路徑:

> system("bash -c 'use Python-3.4; python --version'") 
bash: use: command not found 
Python 2.7.1 
+0

當我在一次調用中組合它們時,我得到同樣的錯誤。我會更新這個問題來反映這一點。 –

回答

0

當您撥打system()它使用/bin/sh,而不是/bin/bashsh在啓動時不會讀取您的.bashrc文件,因此它不知道您在那裏定義的任何功能。

要從.bashrc使用該功能,你必須得到bash去運行它:

system("bash -c 'use Python-3.4; python --version'")

編輯:收單引號的位置。

+0

這給了我同樣的錯誤(請參閱更新的問題)。 –

相關問題