Процесс замещения
Я осмотрелся вокруг того, что озадачивает меня, и я нашел только это:Некоторые программы не допускают подстановку процессов для входных файлов?
что частично помогает, но я действительно хотел бы понять всю историю. Я заметил, что некоторые из моих R-сценариев дают разные (то есть неправильные) результаты, когда я использую подстановку процесса.
Я попытался определить проблему с помощью контрольного примера:
Этот скрипт:
#!/usr/bin/Rscript
args <- commandArgs(TRUE)
file <-args[1]
cat(file)
cat("\n")
data <- read.table(file, header=F)
cat(mean(data$V1))
cat("\n")
с входным файлом, сгенерированным таким образом:
$ for i in `seq 1 10`; do echo $i >> p; done
$ for i in `seq 1 500`; do cat p >> test; done
приводит меня к этому:
$ ./mean.R test
test
5.5
$ ./mean.R <(cat test)
/dev/fd/63
5.501476
Дальнейшие тесты показывают, что некоторые строки потеряны ... но я хотел бы понять, почему. Использует ли read.table (сканирование дает те же результаты) поиск?
Ps. с меньшим тестовым файлом (100) сообщается об ошибке:
$./mean.R <(cat test3)
/dev/fd/63
Error in read.table(file, header = F) : no lines available in input
Execution halted
Добавьте # 1: с измененным сценарием, который использует сканирование, результаты совпадают.