2016-07-08 8 views
4

ich das folgende Bash-Skript haben, in dem ein R-Skriptein Argument von R Rückkehr bash

genannt wird
#!/bin/bash 

declare -x a=33 
declare -x b=1  
declare -x c=0 

Rscript --vanilla MWE.R $a $b $c 

echo $a $b $c 

Ich möchte die bash Variablen in der R-Skript ändern und ihre geänderten Werte in der Bash-Skript zurückgeben weil ich dann die modifizierten Variablen woanders übergebe. Das Skript ist R

#!/usr/bin/env Rscript 
args = commandArgs(trailingOnly=TRUE) 

Rb = as.numeric(args[2]) 
Rc = as.numeric(args[3]) 

Rb = Rb + 1 
Rc = Rc + 1 

args[2]=Rb 
args[3]=Rc 

print(c(args[1],args[2],args[3])) 

jedoch der Ausgang des printecho und jeweils sind:

[1] "33" "2" "1" 
33 1 0 

die zeigt, dass die neuen Werte werden nicht aus R weitergegeben einzuschlagen. Was mache ich falsch?

Antwort

3

Da Rscript keine Manipulation von Umgebungsvariablen zulässt, müssen Sie die R Ausgabe aus dem Programm bash erfassen.

Eine der vielen Möglichkeiten ist es, eine array zu verwenden:

#!/bin/bash 

declare a=33 
declare b=1  
declare c=0 

declare -a RESULT 
RESULT=($(Rscript --vanilla MWE.R $a $b $c)) 

a=${RESULT[1]} 
b=${RESULT[2]} 
c=${RESULT[3]} 
+0

Das war nicht in meiner ersten Frage, aber ich kann nicht einen Weg zu manipulieren, um die Ergebnisse des Arrays finden - ich die Frage ändern wenn es das Beste ist. Ich muss testen, ob 'c 'gleich 1 ist, aber alles, was ich versucht habe, die Ausgabe in eine Ganzzahl zu konvertieren, ist fehlgeschlagen (und ich habe es versucht, seit Sie zuerst geantwortet haben!). Es sieht so aus, als ob ich die Anführungszeichen um die Ergebnisse herum versuche, mich von jeder weiteren Manipulation abzuhalten und sogar etwas wie 'c = $ {RESULT [3]} | sed "s/\" // g "' hilft nicht. Grundsätzlich scheint "c" immer "1" zu sein, aber nie "1". – SnowFrog

+0

OK, was versuchst du zu erreichen? Ich meine, alle die arithmetische Manipulation wird innerhalb des Bash-Skripts sein? – klashxx

+0

Wenn 'c' ist' "1" 'Ich möchte dann in der Lage sein, es als eine Zahl für weitere Berechnungen im Bash-Skript zu verwenden, aber was auch immer ich versuche, es in eine Zahl zu konvertieren zB unter vielen anderen 'c = $ {RESULT [3]} | sed" s/\ "// g" ', es funktioniert nicht. Es wird als ein Charakter betrachtet (ich denke), egal was ich tue. – SnowFrog