Определите путь выполняющегося сценария

Базовое имя делает это, удаляет путь. Это также удалит суффикс, если дали и если бы это соответствует суффиксу файла, но необходимо было бы знать, что суффикс дает команде. Иначе можно использовать mv и выяснить то, что новое имя должно быть некоторым другим путем.

234
задан Konrad Rudolph 19 June 2019 в 03:49
поделиться

3 ответа

Вы можете обернуть сценарий r в сценарий bash и получить путь к сценарию в виде переменной bash, например:

#!/bin/bash
     # [environment variables can be set here]
     path_to_script=$(dirname $0)

     R --slave<<EOF
        source("$path_to_script/other.R")

     EOF
2
ответ дан 23 November 2019 в 03:31
поделиться
frame_files <- lapply(sys.frames(), function(x) x$ofile)
frame_files <- Filter(Negate(is.null), frame_files)
PATH <- dirname(frame_files[[length(frame_files)]])

Не спрашивайте меня, как это работает, потому что я забыл: /

35
ответ дан 23 November 2019 в 03:31
поделиться

Вы можете использовать функцию commandArgs , чтобы получить все параметры, переданные Rscript реальному интерпретатору R, и найти в них - file = . Если ваш скрипт был запущен из пути или если он был запущен с полным путем, script.name ниже будет начинаться с '/' . В противном случае он должен быть относительно cwd , и вы можете объединить два пути, чтобы получить полный путь.

Изменить: похоже, что вам понадобится только сценарий . имя выше и убрать последний компонент пути. Я' Мы удалили ненужный пример 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)

other.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"

Это то, что, я думаю, ищет dehmann.

67
ответ дан 23 November 2019 в 03:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: