2016-08-25 3 views
3

ich versuchte mit dem folgenden in R`Terminal` vs` System() `in R

system("Message=HelloWoRld;echo $(sed 's/R/r/' <(echo ${Message}))") 

aber es funktioniert nicht, während

Message=HelloWoRld 
echo $(sed 's/R/r/' <(echo ${Message})) 

funktioniert gut, wenn Kopie im Terminal eingefügt. Das Problem scheint mit <(..) verwandt zu sein. Wenn ich entweder which bash oder system("which bash") mache, bekomme ich /bin/bash.

Warum gibt derselbe Befehl über system() oder direkt am Terminalfenster nicht zum selben Ausgang?


FYI, ich bin auf Mac OS X 10.11.3. Bash ist GNU bash, version 3.2.57(1) und R ist R version 3.2.3.

+1

wusste nicht, dass Du hast deine vorherige Q in einer anderen Umgebung verpackt. Versuchen Sie Rohre, anstelle von Prozess sub, dh. 'system (" Message = HelloWoRld; echo $ (echo $ {Nachricht} | sed 's/R/r /' "). Viel Glück. – shellter

+1

Das äußere' echo' ist redundant; 'system (" Message = HelloWoRld; echo $ Nachricht | sed 's/R/r /' ")'. – chepner

+0

@shellter Das wird das gleiche Problem wie der aktuelle Code von OP haben (dh es wird auch nicht funktionieren - abhängig von der Shell). In der Tat, beide Lösungen sind schrecklich indirekt.Viel direkter ist 'sed s/R/r/<<< $ Message'. –

Antwort

7

system ist kein Terminal-Emulator und es läuft nicht Bash. Ihr Terminal führt Bash aus. Um denselben Effekt mit system zu erhalten, führen Sie den Befehl in Bash aus. Z.B.

Darüber hinaus ist Ihr aktueller Bash-Befehl ziemlich kompliziert und verwendet unnötige Befehlsaufrufe; können Sie das gleiche über die viel einfacher

sed s/R/r/ <<< $Message 

@chepner macht die ausgezeichnete Punkt erreichen, dass eine andere Lösung direkt in system ohne Notwendigkeit verwendet werden, kann die Ausführung passieren Bash:

system("Message=HelloWoRld; echo $Message | sed 's/R/r/'") 
+0

Tatsächlich würde das folgende System funktionieren ('bash -c \' Nachricht = HelloWoRld; Echo $ (sed "s/R/r /" <(Echo $ {Nachricht})) '). Also welche Sprache soll man in 'system (" .. ") eingeben? Es ist eine Art Shell-Skript? Gibt es ein '/ usr/bin/' das ist die von 'system (..)' verwendete Sprache? Danke –

+0

@ Remi.b Es hängt von Ihrem System ab, sehen Sie für weitere Details die System-Dokumentation. Auf Mac wird der Befehl wahrscheinlich durch '/ bin/sh' ausgeführt, aber ich würde mich nicht darauf als allgemeine Regel verlassen. Insbesondere wird dies unter Windows nie funktionieren. –

+2

Alle POSIX-kompatiblen Systeme verwenden '/ bin/sh' als Standard-Shell; Die tatsächliche Shell, die zum Implementieren von '/ bin/sh' verwendet wird, ist im Allgemeinen irrelevant, solange die Shell ihre Eingabe in einer POSIX-kompatiblen Weise ausführt. – chepner