programar - shell script expect
Cómo incluir una entrada interactiva en el script que se ejecutará desde la línea de comandos (3)
Estoy tratando de escribir un script R interactivo. Por ejemplo:
try.R:
print("Entr some numbers. >",quote=F)
a = scan(what=double(0))
print a
q()
Ahora, si lo ejecuto en la línea de comando como
$ R --no-save < try.R
Intenta obtener el stdin de try.R, dando el siguiente error:
> print("Entr some numbers. >",quote=F)
[1] Entr some numbers. >
> a = scan(what=double(0))
1: print a
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
scan() expected ''a real'', got ''print''
Execution halted
Intenté algunos otros métodos pero todos dan errores. Por ejemplo:
$ R CMD BATCH try.R
$ Rscript try.R
Entonces, ¿cómo escribo un script R que funcione desde la línea de comandos del shell * nix, y pueda recibir información interactiva del usuario?
La respuesta de @Joshua Ulrich está bien para Linux, pero se bloquea en macOS y debe terminarse con Ctrl-D.
Esta es una solución alternativa tanto para Linux como para macOS:
#!/usr/bin/env Rscript
print(system("read -p ''Prompt: '' input; echo $input", intern = TRUE))
Lo que me funcionó en Windows con RStudio 0.98.945 y R versión 3.1.1 fue:
cat("What''s your name? ")
x <- readLines(con=stdin(),1)
print(x)
Prueba esto:
cat("What''s your name? ")
x <- readLines(file("stdin"),1)
print(x)
Esperemos que alguna variante de eso funcione para ti.