2016-07-28 2 views
1

У меня есть сценарий sh, который может запускаться только из определенного каталога, потому что он ищет файлы в этом каталоге, и я не хочу менять sh-файл.Вызов оболочки skript с определенным рабочим каталогом из R

Предположим, что файл находится в ./sub/script.sh и рабочий каталог R является ./

Что работает,

wd = getwd() 
setwd("./sub") 
system2("./script.sh") 
setwd(wd) 

Но я считаю, что довольно неудобно. Как я могу обойтись без изменения рабочего режима R?

+1

насчет просто 'system2 ("CD югу && ./script.sj")'? –

+1

'system2 (" cd ./ && ls ")', похоже, не работает в качестве примера. Я думаю, это потому, что 'system2' использует shQuote. 'system' работает отлично. –

+1

Вы ** должны ** изменить сценарий оболочки, потому что это плохой скрипт. 'setwd' действительно не имеет места в R - не используйте его. –

ответ

1

Как system2 использует shQuote мы можем использовать только system() и, как уже указывал @Dirk вы можете использовать

system("cd ./sub && sh script.sh") 
2

Это не красиво, но делает работу

# A function that will call the script 
test <- function(){ 

    # Current working directory 
    cur <- getwd(); 

    # On exit, come back 
    on.exit(setwd(cur)); 

    # Change directory 
    setwd("~"); 

    # Run the command 
    system("pwd"); 

    # Return 
    NULL 
} 

Тогда просто вызовите функцию test().

Смежные вопросы