2015-05-18 11 views
5

W moim pliku ~/.bash_profile Ja to alias polecenie:R: Alias ​​polecenia wywoływane z system()

which mvsync 
alias mvsync='rsync --remove-source-files -arvuP' 
    /usr/bin/rsync 

współpracuje z powłoki bash, ale gdy zgłoszę go od wewnątrz R z system dostaję polecenie nie znaleziono:

R 
system('mvsync --help') 
sh: mvsync: command not found 

## Or 
system('mvsync --help', intern=TRUE) 
sh: mvsync: command not found 
Error in system("mvsync --help", intern = TRUE) : 
    error in running command 

## Or 
system("bash -i -c mvsync") 
bash: mvsync: command not found 

[4]+ Stopped     R 

Inne zmienne środowiskowe w pliku bash_profile są poprawnie rozpoznawane przez R/system(). Każdy pomysł jak/jeśli można go naprawić?

To info sesji R:

sessionInfo() 
R version 3.1.3 (2015-03-09) 
Platform: x86_64-redhat-linux-gnu (64-bit) 
Running under: CentOS release 6.6 (Final) 

locale: 
[1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C    LC_TIME=en_US.UTF-8  LC_COLLATE=en_US.UTF-8  LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8  LC_NAME=C     LC_ADDRESS=C    LC_TELEPHONE=C    
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] graphics grDevices utils  datasets stats  methods base  

other attached packages: 
[1] ggplot2_1.0.0 data.table_1.9.4 

loaded via a namespace (and not attached): 
[1] chron_2.3-45  colorspace_1.2-4 digest_0.6.8  grid_3.1.3  gtable_0.1.2  MASS_7.3-39  munsell_0.4.2 plyr_1.8.1  proto_0.3-10  Rcpp_0.11.3  reshape2_1.4  scales_0.2.4  stringr_0.6.2 
+0

Czy próbowałeś dodać 'system ('mvsync - help', intern = TRUE)' – pacomet

+0

@pacomet Nie mam szczęścia, boję się (patrz edytowany post), ale dzięki. – dariober

+0

Alias ​​jest bash-izmem, a nie powłoką (brzmi sprzecznie, wiem). Wypróbuj 'system (" bash -i -c mvsync ")' ('-i' jest ważne, aby uzyskać bash, aby uzyskać dostęp do takich funkcji jak aliasy). – r2evans

Odpowiedz

1

Twoja powłoka nie jest chyba shell logowanie: http://linux.die.net/man/1/bash

Gdy bash wywoływany jest jako interaktywny logowania muszli lub jako non-interactive powłoka z opcją --login najpierw odczytuje i wykonuje polecenia z pliku/etc/profile, jeśli ten plik istnieje. Po odczytaniu tego pliku szuka ~/.bash_profile, ~/.bash_login, i ~/.profile, w tej kolejności, i czyta i wykonuje polecenia od pierwszego, które istnieje i można je odczytać. Opcja -noprofile może być używana, gdy powłoka jest uruchamiana w celu zahamowania tego zachowania.

--login mogą działać, ale może lepiej byłoby umieścić swój alias w .bashrc, które zostaną wykonane, nawet jeśli nie jest powłoką logowania

0

Najwyraźniej aliasy nie są rozszerzane w nieinterakcyjnym muszli sesje.

Musisz albo uruchomić

shopt -s expand_aliases

Wewnątrz wywołania systemowego, na przykład

system('bash -l',input=c("shopt -s expand_aliases","mvsync --help"))

lub zdefiniować zmienną środowiskową BASH_ENV i dodać ją do tego pliku.

Powiązane problemy