Ви можете скористатися commandArgs
функцією, щоб отримати всі параметри, які Rscript передав фактичному R-перекладачеві, і шукати їх --file=
. Якщо ваш скрипт був запущений з контуру або якщо він був запущений повним шляхом, script.name
нижче розпочнеться з а '/'
. В іншому випадку вона повинна бути відносно cwd
і ви можете сформулювати два шляхи, щоб отримати повний шлях.
Редагувати: це здається, що вам знадобиться лише script.name
вищезазначене та зняти кінцевий компонент шляху. Я видалив непотрібний cwd()
зразок і очистив основний сценарій і розмістив свій other.R
. Просто збережіть цей скрипт і other.R
сценарій в одній і тій же директорії chmod +x
, і запустіть основний.
main.R :
#!/usr/bin/env Rscript
initial.options <- commandArgs(trailingOnly = FALSE)
file.arg.name <- "--file="
script.name <- sub(file.arg.name, "", initial.options[grep(file.arg.name, initial.options)])
script.basename <- dirname(script.name)
other.name <- file.path(script.basename, "other.R")
print(paste("Sourcing",other.name,"from",script.name))
source(other.name)
інше.R :
print("hello")
вихід :
burner@firefighter:~$ main.R
[1] "Sourcing /home/burner/bin/other.R from /home/burner/bin/main.R"
[1] "hello"
burner@firefighter:~$ bin/main.R
[1] "Sourcing bin/other.R from bin/main.R"
[1] "hello"
burner@firefighter:~$ cd bin
burner@firefighter:~/bin$ main.R
[1] "Sourcing ./other.R from ./main.R"
[1] "hello"
Це я вважаю, що деман шукає.