Я пытаюсь использовать readLines()
, чтобы получить от пользователя подтверждение того, что конфигурация была прочитана правильно перед запуском действительно длинного пакетного сценария, и она ведет себя очень странно.
Вот тестовый сценарий I Я работаю с:
f = file("stdin","r");
cat("go go go\n")
invisible(readLines(f, 1))
cat("done!\n")
Вот что я хочу сделать:
$ Rscript test.R
go go go
[script pauses until user presses enter]
done!
$
Вот что он делает вместо этого:
$ Rscript test.R
go go go
[user presses enter]
[nothing happens]
[user presses ^C]
[nothing happens]
[user presses ^Z]
[1]+ Stopped Rscript test.R
$ bg 1
[1]+ Rscript test.R &
done!
$
Ват.
Когда я выполняю эхо в stdin перед запуском скрипта, он работает:
$ echo "\n" | Rscript test.R
go go go
done!
$
Когда я изменяю скрипт на использование stdin()
, он, вероятно, предсказуемо берет свой мяч и возвращается домой, так как Rscript не работает в интерактивном режиме:
$ Rscript scripts/test.R
go go go
$ [<-- distinct lack of 'done!']
$ echo "\n" | Rscript scripts/test.R
go go go
$ [<-- same]
Есть идеи? Моя резервная копия - просто добавить большую Sys.sleep()
, чтобы у пользователя было время на ^ C, если это необходимо, но это всегда грубо.