On Thu, 20 Dec 2018 12:00:04 +0100 Agustin Lobo <aloboa...@gmail.com> wrote:
> For a given program, I need to set up its environment, which I > normally do with source /home/alobo/OTB-6.6.0-Linux64/otbenv.profile > from the terminal. The problem with this approach is that in Unix-like systems, child processes cannot directly modify environment variables of their parents (or any other processes besides those they are about to spawn). In /bin/bash, `source` is a special builtin command that runs without spawning child processes - therefore being able to modify the environment of the *current* process. > Now, when I try to do the same from within R, I get: > > > system("source /home/alobo/OTB-6.6.0-Linux64/otbenv.profile", > > intern=TRUE) > sh: 1: source: not found Moreover, `source` is a bash-ism and R launches the `system` commands using /bin/sh, which might be different from /bin/bash. The POSIX-correct way to include a batch file in the current shell session is a dot: `. /home/alobo/OTB-6.6.0-Linux64/otbenv.profile` http://pubs.opengroup.org/onlinepubs/9699919799.2018edition/utilities/V3_chap02.html#dot Since this way you can only modify the environment of the temporary shell process spawned by `system`, you have set up the environment and launch the executable in a single `system` command: system(". /home/alobo/OTB-6.6.0-Linux64/otbenv.profile; exec otbcli_something") -- Best regards, Ivan ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.