Что делает bash в пакете devtools?

В ответ на предыдущий вопрос Альтернативы system() в R для вызова sed, rsync, ssh и т.д.: Существуют ли функции, должен ли я написать свою собственную, или я упускаю суть?, хэдли ответ указал, что столкнувшись с подобной проблемой, он использовал такую ​​функцию, как:

bash <- function() system("bash")

Я нашел оригинал в его пакете devtools; реализовано в devtools/R/bash.R:

#' Open bash shell in package directory.
#'
#' @param pkg package description, can be path or package name.  See
#'   \code{\link{as.package}} for more information
#' @export
bash <- function(pkg = NULL) {
  pkg <- as.package(pkg)

  in_dir(pkg$path, system("bash"))
}

Я не понимаю смысла этого. Когда я выпускаю

bash <- function() system("bash")

Он отправляет меня в оболочку bash, после чего exit возвращает меня в сеанс R, но функции bash нет. Кажется, я могу получить тот же эффект, выполнив любую из следующих пар команд (первая команда в R, вторая в bash)

system('bash')
exit

or

q('yes')
R

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

Я также не могу найти дальнейшего использования функции bash в пакете devtools.

Может кто-нибудь помочь мне понять, как можно использовать функцию bash; можно ли его использовать в других контекстах (например, в сценариях или функциях), кроме интерактивного режима R?


person David LeBauer    schedule 13.10.2011    source источник


Ответы (2)


Более ранние версии devtools включали некоторые функции для отправки/получения кода в git/github. Теперь это устарело.

Вместо этого вспомогательная функция bash просто открывает редактор bash в каталоге пакета. Это означает, что вы можете использовать инструменты командной строки для взаимодействия с git/github.

Цель bash — просто сэкономить несколько нажатий клавиш, чтобы открыть командную строку в каталоге пакета. Никакой другой функции он не выполняет.

person Andrie    schedule 13.10.2011

Тогда либо вы не набрали

bash <- function() system("bash")

именно так, одной строкой. Вот что я получаю:

> bash <- function() system("bash")
> bash()
[gavin@prometheus cocorresp_check]$ exit
> ls()
 [1] "a"       "b"       "bash"    "cars.lo" "dat"     "Dbig"    "Djackal"
 [8] "foo"     "i"       "jack.t"  "jackal"  "mat"     "mat2"    "meanDif"
[15] "mod"     "N"       "perm"    "x"       "Xa"      "Xab"     "Xb"     
[22] "xct"     "y"
> match.fun("bash")
function() system("bash")

Обратите внимание, что bash() — это третий объект в списке. Таким образом, первая строка определяет функцию, я использую ее во второй строке, чтобы перейти к оболочке bash, из которой я быстро выхожу, возвращая меня к приглашению R.

Если функция не определена в вашей рабочей среде, то все, что вы сделали для ее определения, не сработало. Из вашего описания следует, что R только что выполнил system("bash").

person Gavin Simpson    schedule 13.10.2011
comment
спасибо, что поймали мою ошибку. Я немного обновил свой вопрос; но мне все еще интересно - полезно ли это помимо интерактивного использования R? - person David LeBauer; 13.10.2011
comment
@David Дэвид, я не думаю, что это имеет какое-либо применение, кроме интерактивного использования R. Все, что он делает, это открывает приглашение bash в текущем каталоге и передает ему управление - R действует в подвешенном состоянии, пока ему не вернется управление. - person Gavin Simpson; 13.10.2011