Mit der commandArgsFunktion können Sie alle Optionen abrufen, die von Rscript an den eigentlichen R-Interpreter übergeben wurden, und nach ihnen suchen --file=. Wenn Ihr Skript über den Pfad gestartet wurde oder wenn es mit einem vollständigen Pfad gestartet wurde, script.namebeginnt das Folgende mit einem '/'. Andernfalls muss es relativ zu sein cwdund Sie können die beiden Pfade zusammenfassen, um den vollständigen Pfad zu erhalten.
Bearbeiten: Es hört sich so an, als würden Sie nur das script.nameObige benötigen und die letzte Komponente des Pfades entfernen. Ich habe das nicht benötigte cwd()Beispiel entfernt, das Hauptskript bereinigt und mein other.R. Speichern Sie dieses Skript und das other.RSkript einfach im selben Verzeichnis chmod +xund führen Sie das Hauptskript aus.
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)
other.R :
print("hello")
Ausgabe :
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"
Ich glaube, das ist es, wonach Dehmann sucht.